32位系统中sizeof(int)*10与sizeof(40)的区别及代码等价性疑问
代码A与B的区别(32位系统环境)
这两段代码完全不同,核心差异在于sizeof运算符的作用对象:
代码A解析
int *numptr = malloc(sizeof(int)*10);
在32位系统中,int类型占4字节,sizeof(int)的计算结果为4。因此这行代码向堆内存申请了4*10=40字节的空间,足以存放10个int类型的数据。
代码B解析
int *numptr = malloc(sizeof(40));
这里的40是int类型的字面常量,sizeof(40)等价于sizeof(int),计算结果同样是4。这意味着代码B仅申请了4字节的内存,只能容纳1个int类型的数据。
关键提醒
- 若想直接申请40字节内存,正确写法是
malloc(40),而非sizeof(40)——sizeof的作用是计算类型或变量的字节占用量,不能直接用来表示数值对应的字节数。 - 如果在代码B中尝试通过
numptr访问超过4字节的内存(比如写入第2个int值),会触发内存越界,引发未定义行为(如程序崩溃、数据损坏等)。
内容的提问来源于stack exchange,提问作者Morty
相关产品推荐
相关产品推荐

