#include <stdlib.h>
int main(void)
{
int* x;
int* y;
x = malloc(sizeof(int));
*x = 42;
*y = 13;
y = x;
return 0;
}
错误在哪一行,为什么..?我不能将指针分配给另一个指针。是的,这里没有打印任何内容..实际上这是我的作业问题...
y
在为它分配值之前,您需要为其分配内存。
y = malloc(sizeof(int));
*y = 13
错误就在这里:*y = 13;
问题是y
以前没有分配(即未定义的行为)。
交换
*y = 13;
y = x;
到
y = x;
*y = 13;
解决问题。显然,内存泄漏的问题malloc(sizeof(int))
依然存在。
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
当你使用指针时,你必须明白一件事:你实际上并没有在堆栈中分配内存,你只是创建了一个指向某个东西的指针。那个东西可以是任何东西,但我们并不真正关心。我们只需要初始化它,我们通过让它指向某个东西来做到这一点。有两种方法,第一种是使其指向堆栈变量,第二种是使其指向堆栈中的位置,您使用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;