“CRT检测到应用程序在堆缓冲结束后写入内存”是什么意思?

时间:2014-06-04 13:50:24

标签: c debugging buffer heap

我遇到了这段代码的问题。它在free(q-> izv)函数中断,我收到一个调试错误:

CRT detected that the application wrote to memory after end of heap buffer

我不知道这意味着什么,所以我会感激我得到的任何帮助。

    typedef struct izvodjaci{
    char *izv;
    int broj;
    struct izvodjaci *sled;
    }IZV;

    obrisi_i(IZV *p){
        while (p){
            IZV *q;
            q = p;
            p = p->sled;
            if (!strcmp(q->izv,"UNKNOWN")) free(q->izv);
            free(q);
        }
    }

提前致谢

1 个答案:

答案 0 :(得分:25)

  

“CRT检测到应用程序在堆缓冲结束后写入内存”是什么意思?

假设您分配了一个堆缓冲区:

char* buffer = malloc(5);

好的,buffer现在指向堆上的五个字符。

假设您在该缓冲区中写入六个字符:

buffer[0] = 'a';
buffer[1] = 'b';
buffer[2] = 'c';
buffer[3] = 'd';
buffer[4] = 'e';
buffer[5] = '\0';

你现在已经破坏了堆;你只被允许写五个字,你写了六个。

现在允许该程序任何。它可以正常工作,可能会崩溃,它可以将您的所有密码发送给中国的黑客,任何

您的实施显然选择了最佳选择,即通知您犯了错误"。你应该非常,非常高兴这就是发生的事情,而不是任何可怕的替代方案。不幸的是,它会在释放缓冲区时通知你,而在你犯错误时通知,但是你很高兴你得到了一个错误。