#include <stdio.h>
int main(void) {
int *arr;
arr[0] = 2;
arr[1] = 3;
printf("%d, %d", *arr, *(arr + 1));
getchar();
return 0;
}
代码使用在线 IDE(repl.it,C 代码在 OS Linux 下运行)正常启动和运行,但在我的计算机(Windows 10)上发生了一些奇怪的事情。编译 ( gcc main.c -o main
) 时,不会发生错误,但程序不会执行任何操作。一个空的控制台打开 1-2 秒然后消失。
如果在初始化指向数组的指针时,将函数执行的结果分配给它malloc
,那么一切都会正常工作。
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int *arr = (int *) malloc(sizeof(int) * 2);
...
}
它真的与操作系统有关吗?在这种情况下,我在哪里可以了解程序的行为?
一切都是正确的。未初始化的变量具有任意值。如果这个变量是一个指针,那么它指向内存中的一个随机位置。尝试将数字 2 写入内存的随机区域自然会导致分段错误,并且您的程序会崩溃。