指向指针

时间:2015-12-31 13:04:32

标签: 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++){
            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]);


}

当我运行它时,一切都很好用&#34; text&#34;指针,但不是&#34; final&#34;指针。当我尝试初始化&#34; final&#34;时出现分段错误消息。用&#39; a&#39;。具体来说,当i = 14且j = 0时,会出现消息。有人可以告诉我原因吗?

1 个答案:

答案 0 :(得分:2)

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

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

char s分配空间。但是,您需要指针,因为malloc会返回指针,但不适合char。 替换为

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

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

注意:

  • 如果您不知道:自标sizeof(char) == 1起,您可以使用sizeof(char)省略乘法。