- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
关于以下功能,我的调试器在完成此功能时向我显示 __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/
关于以下功能,我的调试器在完成此功能时向我显示 __stack_chk_fail。 我的系统是 Mac OS。 是因为我的栈检查引用溢出了。 另外,根据我的实验,如果设置 vocab_size = 3
编译 C++ 代码时出现此错误: undefined reference to `__stack_chk_fail' 已经尝试过的选项: 编译时添加了 -fno-stack-protector - 不
我试图为一个将被重复调用的节点创建一个 SKNode 子类,每次与用户交互,然后是破坏/爆炸效果。但是,每当我尝试运行代码时,都会收到 SIGABRT 错误。与调试终端中的 ___stack_chk_
编译 C++ 代码时出现此错误: undefined reference to `__stack_chk_fail' 已经尝试过的选项: 在编译时添加了 -fno-stack-protector -
我想在 gcc 中为我正在构建的在 x86 linux 上运行的系统启用堆栈保护功能。 我希望如果它检测到堆栈粉碎,它会调用我自己的函数来处理这种情况,或者它会调用我自己的函数实现 __stack_c
我正在尝试使用 gcc 4.0 和 10.4u SDK 在 xcode 中编译 C++ 应用程序。 我收到以下链接器错误。 “_stack_chk_fail”,引用自: libAudioDecoder
起初我警告说我/不是程序员,而只是管理员我试图理解一些操作 当我安装 Oracle 制作的程序时,我收到日志消息: /usr/bin/make -f ins_precomp.mk relink ORA
这是具体的堆栈跟踪,请参阅下面的代码... Thread 8 Crashed: 0 libsystem_kernel.dylib 0x00000001969bb270 __pth
我是一名优秀的程序员,十分优秀!