【发布时间】:2010-11-13 00:07:11
【问题描述】:
int *ptr = malloc(sizeof(char));
*ptr = 100000;
printf("%d\n", *ptr); // 100000
不应该只为char分配足够的内存,即1字节吗?所以最大的数不应该是255吗?
它仍然如何打印100000?
更新
感谢您的回答。如果它覆盖了下一个字节,那么 C 怎么知道这个数字大于一个字节,而不是只看第一个字节?
【问题讨论】:
-
简短的回答:因为 C 甚至不能拼写“内存安全”。
-
@R.. 我希望这是你一天的亮点。
-
关于您更新的问题,这在很大程度上没有意义,因为一旦您编写了无效的代码(即调用未定义的行为),任何事情都可能发生。您的实现中发生的情况是内存是字节大小的插槽的平面序列,并且由于您通过
int指针访问内存,因此指向的字节和随后的 3 个字节将作为int访问。抱歉,如果我有点不耐烦,但每周我们都会看到 20 多个“为什么这有效?”关于具有未定义行为的代码的问题。 -
@R.. 当然,您必须了解每个人都必须从某个地方开始。 IMO 在 Stack Overflow 上不允许那些对善意的问题投反对票的人,仅仅是因为 他们 认为这很愚蠢。
-
请务必注意,您分配的号码的值无关紧要。如果你写了
*ptr = 1;,你也会遇到同样的问题——因为1仍然是int类型,并且仍然占据sizeof (int)字节。
标签: c