我有如下代码:
当我编译并运行它时,我得到以下输出:
可能会重复:
无效的读写有时会导致分割错误,有时不会
代码如下:
#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
而不会崩溃。为什么会这样呢?
sizeof(char)
总是1。我只是想尝试一下以确定工作的基本原理。 - Alex Reynolds