可能重复:
Invalid read/write sometimes creates segmentation fault and sometimes does not为什么运行这不会产生分段错误?
我有以下代码:
#include <stdlib.h>
#include <stdio.h>
int main() {
int *ptr = NULL;
ptr = malloc(sizeof(char));
if (ptr) {
*ptr = 10;
printf("sizeof(int): %zu\nsizeof(char): %zu\n", sizeof(int), sizeof(char));
printf("deref of ptr: %d\n", *ptr);
free(ptr);
return EXIT_SUCCESS;
}
else
return EXIT_FAILURE;
}
当我编译并运行它,我得到以下输出:
$ gcc test.c
$ ./a.out
sizeof(int): 4
sizeof(char): 1
deref of ptr: 10
值sizeof(char)
小于sizeof(int)
。我的malloc
呼叫只留出足够的空间用于char
。但是,我的程序能够在不崩溃的情况下为ptr
分配一个整数值。为什么这个工作?
你可能想看看这个问题及其答案的指导:http://stackoverflow.com/questions/8641478/invalid-read -write-sometimes-creating-segmentation-fault-and-sometimes-does-not – 2012-01-01 21:58:16
C不一定会遵守变量'boundries',所以你可能会覆盖内存中的一些随机3字节, 。 – 2012-01-01 22:01:29
'sizeof(char)'总是1(6.5.3.4,§3)。 – 2012-01-01 22:04:41