6

私は関数を持っています。関数の基本的な考え方は、aポイントを変更することです。最初のバージョンは機能しますが、2番目のバージョンは機能しません。

誰かが私がここで何が起こっているのかを理解するのを手伝ってくれませんか?

// this works
void swap(int **a) {
    int *temp = malloc(sizeof(int) * 3);
    temp[0] = 0;
    temp[1] = 1;
    temp[2] = 2;
    *a = temp;
}

// this does not
void swap(int **a) {
    *a = malloc(sizeof(int) * 3);
    *a[0] = 0;
    *a[1] = 1; // seg fault occurs on this line
    *a[2] = 2;
}

私はそのように関数を呼び出しています

int main() {
   int b[] = {0,1};
   int *a = b;

   swap(&a);

   return 0;
}

また、両方の関数が同時に同じファイルに属しているわけではありません。

4

1 に答える 1

14

の優先順位[]はより高くなります*(実際、[]Cで最も優先順位が高くなります)。つまり、あなたの表現はあなたが意図したもの*(a[0])ではないということです。(*a)[0]

于 2013-03-25T18:52:21.420 に答える