无法弄清楚指针在这里的错误?

时间:2013-04-13 17:16:18

标签: c pointers

#include <stdlib.h>
int main(void)
{
    int* x;
    int* y;
    x = malloc(sizeof(int));
    *x = 42;
    *y = 13;
    y = x;
    return 0;
}

哪条线的误差在哪里?为什么?我不能指定指向另一个指针的指针。是的,在这里没有打印出任何东西......实际上是我的作业问题......

4 个答案:

答案 0 :(得分:3)

在为其赋值之前,您需要为y分配内存。

 y = malloc(sizeof(int));
 *y = 13

答案 1 :(得分:3)

错误在于:*y = 13;问题是先前未分配y(即未定义的行为)。

开关

*y = 13;
y = x;

y = x;
*y = 13;

解决了这个问题。显然,malloc(sizeof(int))的内存泄漏仍然存在。

答案 2 :(得分:2)

y是一个狂野指针,您将13分配给任何内容。你也需要malloc()

使用malloc之类的

y = malloc(sizeof(int));
*y = 13;

或使y成为像

这样的堆栈变量
int y = 0;
...
y = *x; //copy value from x to y by dereferencing x

答案 3 :(得分:0)

当你使用指针时,你必须要理解一件事:你实际上并没有在堆栈中分配内存,你只是创建一个指向某事物的指针。这可能是什么,但我们并不在乎。我们只需要初始化它,我们通过使它指向某些东西来做到这一点。 有两种方法,第一种方法是使其指向堆栈变量,第二种方式使其指向放置在堆栈中,使用malloc()分配。

第一种方式:

int x; //you create a stack variable
int *ptr; //you create a type int pointer
ptr=&x; //you make ptr point to the adress where 'x' is

第二种方式:

int *ptr; //you create a type int pointer
*ptr=malloc(sizeof(int)); you allocate memory for one int

上面代码的问题是你没有为int *y分配内存,但是你尝试在那里保存一个数字。

您的代码可以像那样编写

#include <stdlib.h>
int main(void)
{
 int* x;
 int* y;
 x = malloc(sizeof(int));
 y = malloc(sizeof(int));
 //now both pointers point to a place in memory so you can actually save data on them
 *x = 42;
 *y = 13;
 y = x;
 return 0;
}

这里的cource问题是,当你指向x时,你失去了y指向的地方,你在内存中留下了不可用的分配位置。所以在{{1指向y您可以使用x

free()