C 指针到指针的分段错误

C 指针到指针的分段错误,c,pointers,C,Pointers,我有以下代码: int main(){ int j,rows,columns; int i; char **text; char **final; rows=45; columns=7; text=malloc(2*sizeof(char)); for(i=0;i<2;i++) text[i]=malloc(3*sizeof(char)); final=malloc(rows*sizeof(char)); for(i=0;i<rows;i++){

我有以下代码:

int main(){   
int j,rows,columns;
int i;
char **text;
char **final;

rows=45;
columns=7;


text=malloc(2*sizeof(char));

for(i=0;i<2;i++)
      text[i]=malloc(3*sizeof(char));


final=malloc(rows*sizeof(char));

for(i=0;i<rows;i++){
            final[i]=malloc(columns*sizeof(char));
                      }

for(i=0;i<2;i++)
 for(j=0;j<3;j++)
      text[i][j]='a';

for(i=0;i<rows;i++){
 printf("i %d\n",i);
          for(j=0;j<columns;j++){
        printf("j %d\n",j);
                   final[i][j]='a';
          }
}

printf("%s\n%s\n",final[0],text[0]);


}
当我运行它时,文本指针一切正常,但最后一个指针却不行。当我尝试用“A”初始化final时,会出现分段错误消息。具体来说,当i=14和j=0时会出现该消息。有人能告诉我原因吗?

final=malloc(rows*sizeof(char));

为字符分配空间。不过,您需要指针,因为malloc返回一个指针,该指针不适合字符。 取而代之的是

final=malloc(rows*sizeof(char*));

注:

如果您不知道:因为根据标准定义sizeofchar==1,您可以省略sizeofchar的乘法。 如果text=malloc2*sizeofchar,则只分配两个字节。
final=malloc(rows*sizeof(char*));
text=malloc(2*sizeof(char*));