2

テストを行い、次のように数値を int ポインターに渡そうとしました。

void   mega_pointer(int *********number)
{
    *********number = 1337;
}

しかし、セグメンテーション違反があります。理解できない。誰かが私を助けることができますか?

編集:メインを追加します:

int   main(void)
{
   int ********number;

   mega_pointer(&number);
   printf("Result = %d\n", ********number);
   return 0;
}

PS : 申し訳ありませんが、実際のプログラムで 9* を使用することはありません。これは単なる実験です ^^

4

5 に答える 5

4

パラメーターの前と同じように、割り当ての前に * 文字がありません。そのはず:

void mega_pointer(int *********number)
{
    *********number = 1337;
}

プログラムに適切な数があれば、問題なく動作するはずです。指している有効な変数があることを確認する必要があります。たとえば、このプログラムは次のように機能します。

#include <stdio.h>

void mega_pointer(int *********number)
{
    printf("%d\n", *********number);
    *********number = 1337;
    printf("%d\n", *********number);
}

int main()
{
    int blah = 1;
    int *blah1 = &blah;
    int **blah2 = &blah1;
    int ***blah3 = &blah2;
    int ****blah4 = &blah3;
    int *****blah5 = &blah4;
    int ******blah6 = &blah5;
    int *******blah7 = &blah6;
    int ********blah8 = &blah7;
    int *********blah9 = &blah8;

    mega_pointer(blah9);

    return 0;
}

それは印刷します:

1
1337

予想通り。

于 2013-08-15T10:42:06.213 に答える
1

コードは機能しますが、最初にポインターを正しく設定する必要があります。

#include <stdio.h>

static void mega_pointer(int *********number)
{
    *********number = 1337;
}

int main(int argc, char **argv) {
    int a = 0;
    int *p1, **p2, ***p3, ****p4, *****p5, ******p6, *******p7, ********p8, *********p9;

    p1 = &a;
    p2 = &p1;
    p3 = &p2;
    p4 = &p3;
    p5 = &p4;
    p6 = &p5;
    p7 = &p6;
    p8 = &p7;
    p9 = &p8;

    mega_pointer(p9);

    printf("a=%d\n", a);
    return 0;
}

実行時:

$ clang -o p ptest.c
$ ./p
a=1337
于 2013-08-15T10:51:32.903 に答える
0

セグメンテーション違反?セグメンテーション違反は、関連付けられていない、またはプログラムに存在しないメモリにアクセスしようとしたときに発生します。

次の方法でこの障害を作成できます。

int *ptr = NULL;
*ptr = 1;

現在このプログラムに関連付けられていない、または過去に関連付けられているメモリにアクセスしています。

于 2013-08-15T10:49:47.803 に答える