我有以下代码:
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));
和
text=malloc(2*sizeof(char));
为char
分配空间。不过,您需要指针,因为malloc
返回一个指针,它不适合char
。
将它们替换为
final=malloc(rows*sizeof(char*));
和
text=malloc(2*sizeof(char*));
<小时/>
注释:
- 如果您不知道:由于标准定义为
sizeof(char) == 1
,因此您可以省略与sizeof(char)
的乘法。
关于c - 指针到指针的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34546929/