【发布时间】:2012-09-25 09:00:34
【问题描述】:
使用malloc()为二维数组分配内存时,当输入大小(矩阵N*N)大于5(即N>5)时会出现分段错误。
对于小于5 的输入(N),以下代码可以正常工作。
您能帮我解决问题吗?
#include<stdio.h>
#include <stdlib.h>
int main(){
int n;
int i,j;
int **adj;
//reading size of a N*N matrix
scanf("%d",&n);
//dynamically allocating memory for a 2-dimensional array
adj=(int**)malloc(sizeof(int)*n);
for(i=0;i<n;i++){
adj[i]=(int*)malloc(sizeof(int)*n);
}
//taking input from the file
for(i=0;i<n;i++){
for(j=0;j<n;j++){
scanf("%d",&adj[i][j]);
}
}
for(i=0;i<n;i++){
for(j=0;j<n;j++){
printf("%d\t",adj[i][j]);
}
printf("\n");
}
return 0;
}
【问题讨论】:
-
如果 N 是每个数组的常数,最好将它重新排列为一维数组并通过简单的 N 乘法计算元素索引。除此之外,它应该是
adj=(int**)malloc(sizeof(int*)*n);跨度> -
我希望它只是一个糟糕的复制粘贴?
标签: c multidimensional-array malloc