我目前正在学习C,并从wibit.com复制了以下内容:

#include <stdio.h>

int main()
{
    int* n;
    *n = 20;
    printf("%i\n", *n);
    return 0;
}

我正在使用GCC并在cmd提示符下编译并运行,如下所示:
gcc prgrm.c -o prgrm.exe    #compiles without any errors
prgrm.exe

然后错误 pop ,提示prgrm.exe已停止工作。我单击调试并得到以下信息:

我所有的程序之前都已经运行过,我还用其他几个程序进行过测试(只需返回0;或printf(etc ...)),它们就可以工作!

有任何想法吗?
谢谢

最佳答案

int* n;

声明一个指向int的指针。它没有分配地址,因此指向内存中的任意地址。这个地址几乎可以肯定是不会写的。即使它是可写的,它也不是您的记忆,所以您不知道编写它的效果。
*n = 20;

尝试写入此不可预测的地址。这导致不确定的行为。崩溃是未定义行为的有效(且有用)类型。

为了使程序正常工作,您需要为n分配存储空间。您可以在堆栈上执行此操作
int n;
n = 20;
printf("%i\n", n);

或动态地在堆上
int* n = malloc(sizeof(*n));
if (n == NULL) {
    printf("Error: out of memory\n");
    return -1;
}
*n = 20;
printf("%i\n", *n);
free(n);

请注意,如果您启用了构建警告,则编译器会警告您有关未初始化变量的使用。将-Wall添加到您的gcc命令行或/W4用于MSVC来启用此功能。

关于c - 基本C程式已停止运作: just in time debugger,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17527375/

10-11 22:40