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

如何编写存储在堆中的数组?我的现有代码是否存在错误?

你的代码存在明确错误

这段代码的核心问题出在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 06:05:31