#include <stdlib.h>
int main(void)
{
int* x;
int* y;
x = malloc(sizeof(int));
*x = 42;
*y = 13;
y = x;
return 0;
}
エラーはどこの行にあり、その理由は.. ? ポインターを別のポインターに割り当てることはできませんか。はい、これには何も印刷されていません..実際には私の宿題の質問です...
ポインタを使用する場合、1 つのことを理解する必要があります。実際にスタックにメモリを割り当てるのではなく、何かへのポインタを作成するだけです。その何かは何でもかまいませんが、あまり気にしません。それを初期化する必要があり、何かを指すようにすることでそれを行います。2 つの方法があります。1 つ目はスタック変数を指すようにする方法で、2 つ目は を使用して割り当てたスタック内の場所を指すようにする方法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
2 番目の方法:
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;