小编San*_*hao的帖子

为什么__stack_chk_fail在我的代码中发生?

关于以下功能,完成此功能后,调试器会向我显示__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)

c macos

6
推荐指数
1
解决办法
8102
查看次数

标签 统计

c ×1

macos ×1