我正在处理这段代码:
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++
stem
和temp
是两个不同的变量。 :)您正在为temp
提供内存并访问stem
.
您正在使用指针,而没有先初始化它们。简单的答案是首先不要使用指针。我看不出您发布的代码中有指针的理由。
struct box
{
char word[200][200];
char meaning[200][200];
int count;
};
struct root {
box alphabets[26];
};
root stem;
容易多了。