首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >"CRT检测到应用程序在堆缓冲区结束后写入内存“是什么意思?

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

Stack Overflow用户
提问于 2014-06-04 21:50:24
回答 1查看 40.5K关注 0票数 14

我在使用这个代码时遇到了问题。它在free(q->izv)函数处中断,我得到一个调试错误,说:

代码语言:javascript
运行
复制
CRT detected that the application wrote to memory after end of heap buffer

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

代码语言:javascript
运行
复制
    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);
        }
    }

提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-05 04:59:43

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

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

代码语言:javascript
运行
复制
char* buffer = malloc(5);

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

假设您将6个字符写入该缓冲区:

代码语言:javascript
运行
复制
buffer[0] = 'a';
buffer[1] = 'b';
buffer[2] = 'c';
buffer[3] = 'd';
buffer[4] = 'e';
buffer[5] = '\0';

你现在已经破坏了堆;你只被允许写5个字符,你写了6个字符。

程序现在被允许做任何事情。它可以正常工作,它可以崩溃,它可以把你所有的密码发送给中国的黑客,anything

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

票数 35
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24039299

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档