【动态二维数组的使用问题】
#include "stdio.h"#include "string.h"#include <malloc.h>#define LEN 100main(){ FILE *fp; int i=0,j=0,k=0,num; char line[15]={0}; //申请二维动态数组 int **arry=(int **)malloc(sizeof(int*)*LEN),*p[LEN]; for (i=0;i<LEN;i++) { arry[i] = (int*)malloc(sizeof(int)*LEN); p[i]=arry[i]; //初始化 memset(arry[i],0,sizeof(arry[i])); } //从文件读入两个变量 fp=fopen("data.txt","r"); while(fscanf(fp,"%d %d\n",&i,&num)!=EOF) { *arry[i]++=num; } fclose(fp); //输出 for (i=0;i<LEN;i++) { for (j=0;i<10;j++) { printf("%d ",*(p[i]+j)); } printf("\n"); }} //我感觉是这一段的操作符优先级影响的,改成这样试试?while(fscanf(fp,"%d %d\n",&i,&num)!=EOF){ *(arry[i]++) = num;}//这里也不对for (j=0;i<10;j++)
[解决办法]
//在堆中开辟一个4×5的二维int数组#include <stdio.h>#include <malloc.h>int **p;int i,j;void main() { p=(int **)malloc(4*sizeof(int *)); if (NULL==p) return; for (i=0;i<4;i++) { p[i]=(int *)malloc(5*sizeof(int)); if (NULL==p[i]) return; } for (i=0;i<4;i++) { for (j=0;j<5;j++) { p[i][j]=i*5+j; } } for (i=0;i<4;i++) { for (j=0;j<5;j++) { printf(" %2d",p[i][j]); } printf("\n"); } for (i=0;i<4;i++) { free(p[i]); } free(p);}// 0 1 2 3 4// 5 6 7 8 9// 10 11 12 13 14// 15 16 17 18 19