简介:原因是assert判断条件写错了
编译器为Visual Studio 2019 Community。
百度了很多都说是malloc过多的问题。但是我确信自己申请的空间大小还不足以引起这样的问题。
在malloc的时候需要assert去判断是否成功malloc,但是我一直是手动去写的。
PGT = (Graph*)malloc(sizeof(Graph));
if (PGT)
{
printf("Malloc Failed!\n");
printf("In %s\n", __func__);
printf("At %d\n", __LINE__);
return -1;
}
这里的if 条件是 PGT,也就是malloc 分配的指针。但是,malloc分配可能会失败,因此需要判断,如果分配失败了,会返回一个NULL。如果返回NULL,那么我们就终止这个函数。
本应该是这样的,但是我这里 if 中的条件不小心少了一个 " !",导致和我预料的结果不一样。而且这样是可以通过编译的,但是无法正常运行。感觉这样的错误很难找。正确的做法是只需要在if条件中加一个!即可。
PGT = (Graph*)malloc(sizeof(Graph));
if ( ! PGT)
{
printf("Malloc Failed!\n");
printf("In %s\n", __func__);
printf("At %d\n", __LINE__);
return -1;
}
有可能错误的代码导致了返回之后的多次调用,一直在malloc,才爆了这个warning