You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在malloc分配的数组中正确存储数值?程序输出重复同一输入值

问题分析与修复

先看你代码里的几个关键错误:

  • printf语法与逻辑错误:printf("%d", &x]); 这里多了一个多余的右方括号,而且你打印的是x的内存地址(&x),不是输入的实际数值。正确写法是printf("%d\n", x);(加换行符让输出更清晰)。
  • 数组赋值逻辑错误:*(w + x) = count; 这行是把count的值存入w数组下标为x的位置。如果输入的x重复,就会不断覆盖同一个数组元素,导致后续查看数组时看到重复值;如果输入的x超出0~9999的范围,还会触发数组越界,引发程序崩溃、数据乱码等未定义行为。
    根据你的需求“使用count变量将数值存入w数组”,应该是按输入顺序把数值依次存入数组,也就是用count作为数组下标,把输入的x存进去,写法是*(w + count) = x; 或者更直观的w[count] = x;。

修正后的代码

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
    int *w = malloc(sizeof(int) * 10000);
    // 检查内存分配是否成功,避免空指针访问
    if (w == NULL) {
        fprintf(stderr, "内存分配失败\n");
        return 1;
    }

    int x;
    int count = 0;                                                                             
    while (scanf("%d", &x) == 1 && count < 10000) { // 限制count范围,防止数组越界
        printf("%d\n", x);
        w[count] = x; // 按输入顺序存入数组
        count++;
    }

    // 可选:打印数组内容验证结果
    printf("数组内容:");
    for (int i = 0; i < count; i++) {
        printf("%d ", w[i]);
    }
    printf("\n");

    free(w);
    w = NULL;
    return 0;
}

额外说明

  • 增加了malloc的空指针检查,这是C语言编程的良好习惯,避免内存分配失败后访问空指针。
  • 循环中添加count < 10000的判断,防止输入超过10000个数值导致数组越界。
  • 用w[count]代替*(w + count),代码可读性更强,两者在功能上完全等价。

内容的提问来源于stack exchange,提问作者Oloyede Adejayan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 04:30:58