我试图使用指针将一个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)
答案 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));