C 一个简单的指针代码 #包括 内部主(空) { int*a; *a=20; printf(“%i\n”,*a); 返回0; }

C 一个简单的指针代码 #包括 内部主(空) { int*a; *a=20; printf(“%i\n”,*a); 返回0; },c,pointers,C,Pointers,我有上面的代码。当代码运行时,我总是收到错误消息“filename.exe已停止工作”。为什么? 您没有为指向的指针分配任何内存。您可以这样做: #include <stdio.h> int main(void) { int* a; *a=20; printf("%i\n",*a); return 0; } int *a = malloc(sizeof(*a)); 或者像这样: #include <stdio.h> int mai

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

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

#include <stdio.h>

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

    return 0;
}
int *a = malloc(sizeof(*a));
或者像这样:

#include <stdio.h>

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

    return 0;
}
int *a = malloc(sizeof(*a));
如果您使用
malloc
进行分配,那么在使用完指针后,您将需要在指针上调用
free


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

int*a
a
的默认值是垃圾,并指向无效内存,您无法分配给该内存。以及类似于
*a=20的赋值这会导致在运行时出现未定义的行为。(语法方面的代码是正确的,因此编译后)有时您可能也会遇到seg错误

或者:

int value;
int *a = &value;
或者使用calloc()或malloc()函数进行动态内存分配

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

记住,动态分配的内存在处理完后必须显式释放(释放)

您有
野生指针
,或者使用
malloc

int *a = malloc(sizeof(int));
*a = 20;
或者使用堆栈变量

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

问题出在你的作业上 *a=20

不能将值分配给那样的指针变量

int b=20; a=&b

谢谢,
Santhosh

未初始化指针。我的理解是,空闲后,
a
现在是一个悬空指针,它可能有一个地址,但不指向任何有效的内存位置。因此,将其设置为NULL@Vivek27视情况而定。如果指针是本地的,并且您即将从函数返回,那么为什么还要麻烦呢?如果变量在作用域中保留了很长时间,那么您的函数可能被分解得很糟糕。