C语言/C++Bug记录-C6262: 堆栈溢出 函数使用了堆栈的“****”个字节: 超过了 /analyze:stacksize ‘16384‘

简介:原因是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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值