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

我在使用此代码时遇到问题。 它在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); } } 

提前致谢

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

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

 char* buffer = malloc(5); 

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

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

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

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

现在允许该程序做任何事情 。 它可以正常工作,它可以崩溃,它可以将你所有的密码发送到中国的黑客, 任何东西

您的实施显然选择了最佳选择,即“通知您犯了错误”。 你应该非常,非常高兴这是发生的事情,而不是任何可怕的替代品。 不幸的是,它会在释放缓冲区时通知您,而不是在您犯错误时通知您,但很高兴您完全没有错误。