此代码有什么问题?
我正在尝试将标准输入中的n行放入chars **a
的矩阵中。
**a
需要动态分配。
代码如下:
int main()
{
char **a=NULL;
int n;
int i=1;
int j=0;
char c;
scanf("%d",&n);
getchar();
a=malloc(n*sizeof(char*));
while(n>0)
{
while(1)
{
c=getchar();
if(c=='\n')
{
j++;
break;
}
i++;
a[j]=realloc(a,i*sizeof(char));
a[j][i-2]=c;
a[j][i-1]='\0';
}
i=1;
n--;
}
printf("%s\n",a[0]);
free(a);
}
答案 0 :(得分:0)
您没有初始化数组a。
如下添加a[j] = NULL
int main()
{
char **a=NULL;
int n;
int i=1;
int j=0;
char c;
scanf("%d",&n);
getchar();
a=malloc(n*sizeof(char*));
while(n>0)
{
a[j] = NULL;
while(1)
{
c=getchar();
if(c=='\n')
{
j++;
break;
}
i++;
a[j]=realloc(a[j],i*sizeof(char));
a[j][i-2]=c;
a[j][i-1]='\0';
}
i=1;
n--;
}
printf("%s\n",a[0]);
free(a);
}
答案 1 :(得分:0)
替换
a[j]=realloc(a,i*sizeof(char));
使用
a[j]=realloc(a[j],i*sizeof(char));
为了只重新分配一个子数组而不是整个数组。
我建议也做另一个答案中建议的改进,以初始化子数组,这也将第一个重新分配变成一个分配。