0

ポインターを使用して、ある 2 次元配列の内容を別の配列にコピーしようとしていました。この簡単なテスト プログラムを作成しましたが、セグメンテーション違反が表示されますが、まだ確固たる理由を見つけることができません。

    #include <stdio.h>

    void main(){
    int m[2][3]={
            {2,3,4},{5,6,7}
    };

    int *p=m;
    int *n;

    int i,j;

    for(i=0;i<2;i++){
        for(j=0;j<3;j++){
            printf("%d \t", *(p+3*i+j));
            printf("Debug here\n");
            *(n+3*i+j)=*(p+3*i+j);
        }

        printf("\n");
    }
}

// Output:
// 2    Debug here
// Segmentation fault (core dumped)
4

4 に答える 4

2

int *nは初期化されたポインターであり、メモリを割り当てていないため、不明な領域にコピーを書き込もうとしています。

これを使用してスペースを割り当てることができますn

int *n = (int *)malloc(2 * 3 * sizeof(int));
于 2013-06-09T03:37:24.540 に答える
2

ターゲット アレイにスペースを割り当てていません。少なくとも、次のことを行う必要があります。

int *n = malloc(2 * 3 * sizeof(int));

また

int n[2][3];
于 2013-06-09T03:37:44.290 に答える