【问题标题】:Error in memory allocation for array of structures结构数组的内存分配错误
【发布时间】:2013-09-14 13:20:30
【问题描述】:

我正在处理这段代码:

struct box
{
    char word[200][200];
    char meaning[200][200];
    int count;
};

struct root {
    box *alphabets[26];
};
root *stem;
box *access;
void init(){
     //cout<<"start";
    for(int i = 0 ; i<= 25; i++){
        struct box *temp =(struct box*)( malloc(sizeof(struct box)*100));
        temp->count = 0;
        cout<<temp->count;
        stem->alphabets[i] = temp;
    }
    //cout<<" initialized";
}

它编译时没有错误,但在执行过程中它会停在temp 分配给stem-&gt;alphabets[i] 的位置。如何解决这个问题?

【问题讨论】:

  • stem 未初始化。从而崩溃。也初始化access
  • 您使用的是 C 还是 C++?它们是不同的语言。
  • 你为什么在 C++ 程序中使用 malloc ???
  • 选择一个 C 或 C++ ?使用 C++,您拥有 STL,让您的工作更轻松。

标签: c++ c pointers struct malloc


【解决方案1】:

stem 设为struct,而不是指针:

root stem; // No asterisk

否则,没有分配给它的内存,所以取消引用它是未定义的行为。

当然你需要用stem.alphabets[i]替换stem-&gt;alphabets[i]

【讨论】:

  • 我猜你的意思是stem
  • @KarthikSivam 欢迎您!如果这解决了您的问题,请考虑通过单击旁边的灰色复选标记来接受答案。这让网站的其他访问者知道您不再积极寻找解决此问题的改进方案,并为您赢得 Stack Overflow 上的全新徽章。
【解决方案2】:

你需要为stem变量分配内存

root * stem = new root();

别忘了释放:

delete stem;

更好的是,阅读一些关于 C++ 中 memory allocations 的内容

【讨论】:

    【解决方案3】:

    stemtemp 是两个不同的变量。 :) 你给temp 提供内存并访问stem

    【讨论】:

    • 我习惯了这个:)继续guyz
    • 那是我——虽然我发誓“你正在给 temp 提供内存并访问 stem”在我投票时不存在,但在你编辑之前它不会让我逆转。 :(
    • 好的——用一个愚蠢的编辑来欺骗它,以消除我良心上的这种讽刺。全部道歉。
    • @goldilocks 冷静的人,感谢并向你的诚实致敬:)
    【解决方案4】:

    您正在使用指针而没有先初始化它们。简单的答案是一开始就不要使用指针。在您发布的代码中,我看不出有任何指针的理由。

    struct box
    {
        char word[200][200];
        char meaning[200][200];
        int count;
    };
    
    struct root {
        box alphabets[26];
    };
    root stem;
    

    容易多了。

    【讨论】:

      猜你喜欢
      • 2018-01-21
      • 1970-01-01
      • 2014-04-21
      • 2021-05-29
      • 2021-08-06
      • 2018-01-29
      • 2018-09-24
      • 1970-01-01
      相关资源
      最近更新 更多