#include <stdio.h>
int main(void)
{
int* a;
*a=20;
printf("%i\n",*a);
return 0;
}
我有上面的代码。当代码在运行时,我总是收到错误消息“filename.exe已停止工作”。为什么?
答案 0 :(得分:6)
您没有为指针指向任何内存。你可以这样做:
int *a = malloc(sizeof(*a));
或者像这样:
int value;
int *a = &value;
如果您使用malloc
进行分配,则在使用完毕后,您将需要在指针上调用free
。
访问未初始化的指针会导致未定义的行为。在你的程序中,它导致了段错误,这是未初始化指针访问的一个非常常见的结果。
答案 1 :(得分:1)
在int* a;
a
中,默认值为garbage,指向无效内存,无法分配给它。像*a=20;
这样的赋值会导致运行时出现未定义的行为。 (语法明智的代码是正确的,所以编译)你可能有时会得到一个seg-fault。
要么:
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;
记住动态分配的记忆,当我们完成时,我们必须明确地释放(免费)。
答案 2 :(得分:0)
您有wild pointer
,使用malloc
int* a = malloc(sizeof(int));
或使用堆栈变量
int b = 0;
int *a = &b;
*a=20;
答案 3 :(得分:0)
问题出在你的任务中 * a = 20。
您不能像这样为指针变量赋值。
int b = 20; a =&amp; b;
谢谢, Santhosh