#include <stdlib.h>
int main(void)
{
int* x;
int* y;
x = malloc(sizeof(int));
*x = 42;
*y = 13;
y = x;
return 0;
}
哪条线的误差在哪里?为什么?我不能指定指向另一个指针的指针。是的,在这里没有打印出任何东西......实际上是我的作业问题......
答案 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()