-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

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が失われ、メモリ内に使用できない割り当て場所が残ることです。yxfree()

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