gpt4 book ai didi

c - 为什么我的代码中会出现 __stack_chk_fail?

转载 作者:太空狗 更新时间:2023-10-29 15:05:25 26 4
gpt4 key购买 nike

关于以下功能,我的调试器在完成此功能时向我显示 __stack_chk_fail。

我的系统是 Mac OS。

是因为我的栈检查引用溢出了。

另外,根据我的实验,如果设置 vocab_size = 30000,它会显示 __stack_chk_fail 错误,但当 vocab_size = 20000 时,它会正常显示。

所以我相信

vocab = (struct vocab_word *)malloc ((size_t) ((vocab_size + 1) * sizeof(struct vocab_word)));

是问题。但是 malloc 在堆上而不是在堆栈上分配内存,所以我想知道我哪里出错了?

void populate_vocab(){
FILE *fin;
fin = fopen(word_file, "rb");
vocab = (struct vocab_word *)malloc ((size_t) ((vocab_size + 1) * sizeof(struct vocab_word)));
char word[MAX_STRING];
int word_idx = 0;
int num = 0;
boolean word_mode = 1;
long long cur_vocab_size = 0;

while (!feof(fin)) {
ch = fgetc(fin);

if(ch == ' '){
word_mode = 0;
}else if(ch == '\n'){
word_mode = 1;
word[word_idx] = 0;
vocab[cur_vocab_size].word = (char *)calloc(word_idx, sizeof(char));
strcpy(vocab[cur_vocab_size].word,word);
vocab[cur_vocab_size].cn = num;
cur_vocab_size++;
if (cur_vocab_size >= vocab_size){
break;
}
//fresh var
word_idx = 0;
num = 0;

}else{
if(word_mode){
word[word_idx] = ch;
word_idx ++;
}else{
num = num * 10;
num += ch - '0';
}
}
}
fclose(fin);
}

最佳答案

根据评论,我想通了原因。其中一个单词超过 MAX_STRING 导致堆栈溢出。

关于c - 为什么我的代码中会出现 __stack_chk_fail?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38418114/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com