转载请注明出处:https://blog.csdn.net/zzdmfk/article/details/83818157
从所周知,在不同的模块中new和delete会发生_CrtIsValidHeapPointer错误,比如在DLL中new, 在EXE中delete。
如用new分配动态数组后,进行了如下memcpy内存拷贝操作:
char* pBuf = new char[512];
memcpy(pBuf, pSrc, 516);
delete [] pBuf;
pBuf = NULL;
此段代码同样会产生_CrtIsValidHeapPointer错误,但错误并非主要由delete引起的,而是memcpy函数往512字节的数组中拷贝516个字节,由于memcpy为非安全版本,所以并不会报错,为避免此类问题,高版本的编译器应该使用memcpy的安全版本:memcpy_s。