结构数组的内存分配错误



我正在处理这段代码:

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->alphabets[i]的位置。如何解决这个问题?

使stem成为struct,而不是指针:

root stem; // No asterisk

否则,没有为其分配内存,因此取消引用它是未定义的行为。

当然,您需要将stem->alphabets[i]替换为stem.alphabets[i].

您需要为 stem 变量分配内存

root * stem = new root();

不要忘记处理:

delete stem;

更好的是,阅读有关内存分配的内容C++

stemtemp是两个不同的变量。 :)您正在为temp提供内存并访问stem.

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

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

容易多了。

相关内容

  • 没有找到相关文章

最新更新