0

我试图使用指针将一个二维数组的内容复制到另一个数组。我写了这个简单的测试程序,但它显示了分段错误,但我仍然找不到可靠的原因?

    #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 回答
1

指针是指向内存位置的变量。它存储内存位置的地址。您可以通过使用取消引用指针来访问该位置*

在你的情况下,

int *n;

这仅声明了一个指向int. 这可以指向单个整数或数组整数。您尚未为其分配任何值(仍未为其分配内存位置)。我们现在不知道它指向哪里(可能不允许您访问内存等)。(这就是段错误的原因)

您需要这样分配内存,

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

指向动态数组的指针比静态数组的优势

int n[2][3];

是指针可以被重用(当然你需要在重新使用free指针之前照顾现有的内存[如果你没有任何其他访问内存的路径])

于 2013-06-09T08:14:45.143 回答
0

reason why?

目的地区域不确定

#include <stdlib.h>

int *p=&m[0][0];
int *n = (int*)malloc(sizeof(m));
于 2013-06-09T08:14:28.993 回答