-3
#include <stdio.h>

int main(void)
{
    int* a;
    *a=20;
    printf("%i\n",*a);

    return 0;
}

我有上面的代码。当代码在运行时,我总是收到错误消息“filename.exe 已停止工作”。为什么?

4

4 回答 4

6

您没有为指向的指针分配任何内存。你可以这样做:

int *a = malloc(sizeof(*a));

或像这样:

int value;
int *a = &value;

如果您使用 分配,malloc那么您将希望free在使用完指针后调用它。

访问未初始化的指针会导致未定义的行为。在您的程序中,它导致了分段错误,这是未初始化指针访问的一种非常常见的结果。

于 2013-04-02T09:17:11.143 回答
1

inint* a; a的默认值是垃圾,并且指向一个无效的内存,你不能分配给它。像*a=20;这样的赋值会在运行时导致未定义的行为。(语法明智的代码是正确的,所以编译)你可能有时也会遇到段错误。

要么做:

int i;
int *a = &i;  // a points to a valid memory that is i
*a = 20;

或使用 calloc() 或 malloc() 函数进行动态内存分配。

int *a = malloc(sizeof(int));
*a = 20;

记住动态分配的内存,我们必须在完成后显式地释放(释放)内存。

于 2013-04-02T09:17:45.820 回答
0

你有wild pointer,要么分配内存给它使用malloc

int* a = malloc(sizeof(int));

或使用堆栈变量

int b = 0;
int *a = &b;
*a=20;
于 2013-04-02T09:17:49.177 回答
0

问题在于您的作业 *a = 20。

您不能像这样为指针变量分配值。

诠释 b = 20; a = &b;

谢谢, 桑托什

于 2013-04-02T10:01:26.013 回答