2

我正在处理这段代码:

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

4 回答 4

6

制作stem一个struct,而不是一个指针:

root stem; // No asterisk

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

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

于 2013-09-14T13:23:28.030 回答
4

您需要为stem变量分配内存

root * stem = new root();

不要忘记释放:

delete stem;

更好的是,阅读一些关于C++ 中内存分配的内容

于 2013-09-14T13:24:11.357 回答
3

stemtemp是两个不同的变量。:) 你正在给内存temp和访问stem.

于 2013-09-14T13:23:06.170 回答
0

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

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

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

容易得多。

于 2013-09-14T13:38:03.690 回答