通过另一个指针分配二维数组时整数指针不起作用?

时间:2013-06-09 03:34:36

标签: c arrays pointers

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

    #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 个答案:

答案 0 :(得分:2)

int *n是一个未初始化的指针,你从未为它分配内存,因此你试图将你的副本写到未知领域。

您可以使用以下内容将空间分配给n

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

答案 1 :(得分:2)

您没有为目标数组分配空间。至少,你应该这样做:

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

int n[2][3];

答案 2 :(得分:1)

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

在你的情况下,

int *n;

这只声明指向int的指针。这可以指向单个整数或数组整数。您尚未为其分配任何值(仍未分配内存位置)。我们现在不知道它指向的位置(可能不允许您访问内存等)。 (这就是seg故障的原因)

你需要分配内存,

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

指向动态数组的指针优于静态数组

int n[2][3];

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

答案 3 :(得分:0)

reason why?

无法确保目的地区域

#include <stdlib.h>

int *p=&m[0][0];
int *n = (int*)malloc(sizeof(m));