use*_*827 9 c debugging heap buffer
我在使用此代码时遇到问题.它在free(q-> izv)函数中断,我得到一个调试错误说:
CRT detected that the application wrote to memory after end of heap buffer
Run Code Online (Sandbox Code Playgroud)
我不知道这意味着什么,所以我会感激任何帮助.
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);
}
}
Run Code Online (Sandbox Code Playgroud)
提前致谢
Eri*_*ert 28
"CRT检测到应用程序在堆缓冲结束后写入内存"是什么意思?
假设您分配了一个堆缓冲区:
char* buffer = malloc(5);
Run Code Online (Sandbox Code Playgroud)
好的,buffer现在指向堆上的五个字符.
假设您在该缓冲区中写入六个字符:
buffer[0] = 'a';
buffer[1] = 'b';
buffer[2] = 'c';
buffer[3] = 'd';
buffer[4] = 'e';
buffer[5] = '\0';
Run Code Online (Sandbox Code Playgroud)
你现在已经破坏了堆; 你只被允许写五个字,你写了六个.
现在允许该程序做任何事情.它可以正常工作,它可以崩溃,它可以将你所有的密码发送到中国的黑客,任何东西.
您的实施显然选择了最佳选择,即"通知您犯了错误".你应该非常,非常高兴这是发生的事情,而不是任何可怕的替代品.不幸的是,它会在释放缓冲区时通知您,而不是在您犯错误时通知您,但很高兴您完全没有错误.