在写程序过程中遇到malloc申请内存时出现错误,错误如下:
0x77C1E8FB (ntdll.dll) (Graph.exe 中)处有未经处理的异常: 0xC0000374:
堆已损坏。 (参数: 0x77C54270)
经过反复查看代码,发现问题,问题代码简化如下:
struct graphAdjList
{
AdjList adjList;
int numVertexes, numEdges;
};
typedef graphAdjList *GraphAdjList;
(*GL) = (GraphAdjList)malloc(sizeof(GraphAdjList));
int *stack;
stack = (int *)malloc(sizeof(int));
程序调试过程中,在第一个malloc代码处没出现错误,但是到了第二个malloc时就提示上面的错误,仔细观察会发现,真正引起错误的其实是第一个malloc。
因为在申请大小的时候,用的是GraphAdjList,而这个是graphAdjList 的指针,也就是此时申请的是指针地址值的大小,但是编译器不会提示错误,调试也不会出现错误,只在第二次malloc时才提示。
解决办法:将GraphAdjList指针类型转换为graphAdjList 结构体类型。
以后注意:在申请内存大小的时候不能将指针类型填入到sizeof处!
后记:还是Java好用,没那么多事!