微较的msvc编译器,调试模式下为了方便检测内存的非法访问,对于不同的内存做了初始化,
未初始化栈: 0xCCCCCCCC
未初始化堆: 0xCDCDCDCD
已释放的堆: 0xDDDDDDDD
0xCCCC解释为GB2312字符即是烫, 0xCDCD即是屯, 0xDDDD即是葺。所以遇到此类问题时,从现象的不同可以反推出具体的内存错误类型。
cpp
#include <stdio.h>
#include <malloc.h>
int main(int argc, char** argv)
{
char stack_mem[32];
stack_mem[31] = 0;
printf("stack mem: %s\n", stack_mem);
char *heap_mem = (char *)malloc(32);
if (heap_mem != NULL) {
heap_mem[31] = 0;
printf("heap mem: %s\n", heap_mem);
free(heap_mem);
printf("heap mem: %s\n", heap_mem);
}
return 0;
}