c - 指针到指针的段错误

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


}

当我运行它时,“文本”指针一切正常,但“最终”指针则不然。当我尝试用“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/

相关文章:

c - C中的建筑结构段错误

c++ - #define 带有 L 标识符的语法

c - 在 c (linux) : How to change packet headers 中发送 ipv6 jumbograms

c++ - C++:在程序中创建一个指针,然后在另一个程序中访问该位置

c - C中重叠对象的语义是什么?

c - 如何使用指向切片字符串的指针的指针

c - C 中 union 内的结构

c - 多维数组如何在内存中格式化?

c++ - 在结构指针中修改 C 字符串

c++ - 使 C++ 将指向 NULL 的指针解释为零