我正在处理这段代码:
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]
的位置停止。如何解决这个问题?
答案 0 :(得分:6)
让stem
成为struct
,而不是指针:
root stem; // No asterisk
否则,没有分配内存,因此取消引用它是未定义的行为。
当然,您需要将stem->alphabets[i]
替换为stem.alphabets[i]
。
答案 1 :(得分:4)
答案 2 :(得分:3)
stem
和temp
是两个不同的变量。 :)你正在为temp
提供记忆并访问stem
。
答案 3 :(得分:0)
您正在使用指针而不首先初始化它们。简单的答案是不首先使用指针。我看不出你发布的代码中有指针的原因。
struct box
{
char word[200][200];
char meaning[200][200];
int count;
};
struct root {
box alphabets[26];
};
root stem;
更容易。