0

「多次元配列」を動的に作成する際に問題が発生しています。comp.lang.c FAQ で 6.14 を読み、そこにリストされているコードに従っています。

            cache_array = malloc(cm_blks * sizeof(int *));
            if (cache_array = NULL) {
                    fprintf(stderr, "out of memory\n");
                    exit(1);
            }

            for (i = 0; i < cm_blks; i++) {
                    cache_array[i] = malloc(6 * sizeof(int));
                    if (cache_array[i] == NULL) {
                            fprintf(stderr, "out of memory\n");
                            exit(1);

                    }
            }

変数 cm_blks は整数で、私のテスト ケースでは 8 です。cache_array は次のように初期化されます。

    int **cache_array;

コードは正常にコンパイルされますが、出力を実行すると、malloc の 2 行目でセグメンテーション違反が発生します。

4

1 に答える 1

3

これは等価チェックではなく、代入です:

if (cache_array = NULL)

これは、割り当ての結果が基本的に false であるため、分岐に設定cache_arrayされNULL、分岐に入りません。その後、コードはポインターifの逆参照を続けます。NULL

への変更:

if (cache_array == NULL)

また:

if (!cache_array)
于 2013-04-25T20:59:50.137 に答える