关于以下功能,完成此功能后,调试器会向我显示__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)));
Run Code Online (Sandbox Code Playgroud)
是问题。但是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 …Run Code Online (Sandbox Code Playgroud)