#include <stdio.h>
int main(void)
{
int* a;
*a=20;
printf("%i\n",*a);
return 0;
}
我有上面的代码。当代码在运行时,我总是收到错误消息“filename.exe 已停止工作”。为什么?
您没有为指向的指针分配任何内存。你可以这样做:
int *a = malloc(sizeof(*a));
或像这样:
int value;
int *a = &value;
如果您使用 分配,malloc
那么您将希望free
在使用完指针后调用它。
访问未初始化的指针会导致未定义的行为。在您的程序中,它导致了分段错误,这是未初始化指针访问的一种非常常见的结果。
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;
记住动态分配的内存,我们必须在完成后显式地释放(释放)内存。
你有wild pointer
,要么分配内存给它使用malloc
int* a = malloc(sizeof(int));
或使用堆栈变量
int b = 0;
int *a = &b;
*a=20;
问题在于您的作业 *a = 20。
您不能像这样为指针变量分配值。
诠释 b = 20; a = &b;
谢谢, 桑托什