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

错误在哪一行,为什么..?我不能将指针分配给另一个指针。是的,这里没有打印任何内容..实际上这是我的作业问题...

4

4 回答 4

3

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

 y = malloc(sizeof(int));
 *y = 13
于 2013-04-13T17:19:01.953 回答
3

错误就在这里:*y = 13;问题是y以前没有分配(即未定义的行为)。

交换

*y = 13;
y = x;

y = x;
*y = 13;

解决问题。显然,内存泄漏的问题malloc(sizeof(int))依然存在。

于 2013-04-13T17:19:19.163 回答
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
于 2013-04-13T17:18:01.493 回答
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;
}

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

*y=13;
free(y);
y=x;
于 2013-04-14T11:09:02.103 回答