结构数组的内存分配错误

时间:2013-09-14 13:20:30

标签: c++ c pointers struct malloc

我正在处理这段代码:

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

4 个答案:

答案 0 :(得分:6)

stem成为struct,而不是指针:

root stem; // No asterisk

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

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

答案 1 :(得分:4)

您需要为stem变量

分配内存
root * stem = new root();

不要忘记处理:

delete stem;

更好的是,在C ++中阅读有关memory allocations的内容

答案 2 :(得分:3)

stemtemp是两个不同的变量。 :)你正在为temp提供记忆并访问stem

答案 3 :(得分:0)

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

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

struct root {
    box alphabets[26];
};
root stem;

更容易。