如何编写存储在堆中的数组?我的现有代码是否存在错误?
你的代码存在明确错误
这段代码的核心问题出在sizeof(int[])部分:
- 在C语言标准中,
sizeof的操作数如果是未知大小的数组类型(比如这里的int[]),属于语法错误,编译器必须给出诊断信息。 - 你能运行程序是因为部分编译器做了非标准扩展,比如默认把
sizeof(int[])等同于sizeof(int),但这完全不符合C语言规范,换个编译器或者开启严格编译模式(比如GCC加-pedantic -std=c99参数)就会直接报错。
正确的写法必须明确指定数组大小,比如要分配能存储5个int的空间:
#include <stdlib.h> // 必须包含malloc的头文件 int *p; p = malloc(sizeof(int[5])); // 也可以用更直观的写法:malloc(5 * sizeof(int))
注意:C语言里不需要强制转换malloc的返回值,强制转换反而可能隐藏潜在问题(比如忘记包含stdlib.h时的隐式声明错误)。
另外,就算编译器允许你这么写,malloc分配的空间大小是不确定的,后续对p的读写操作极大概率会触发内存越界,导致程序崩溃或者出现不可预测的行为。
内容的提问来源于stack exchange,提问作者Macit Salur
相关产品推荐
相关产品推荐

