一个简单的指针代码

时间:2013-04-02 09:16:03

标签: c pointers

#include <stdio.h>

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

    return 0;
}

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

4 个答案:

答案 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