(int*) malloc(SIZE * sizeof(int)) 惨痛的教训

 

 

      在做PSO-cluster解决 SR问题时,当SIZE较小,如SIZE<=8时,程序正常运行,但是在free(mark)时出错。

      当SIZE=10或者更大时,程序在InitArea-->CandidateSS或其他函数中的q_create()中出现错误:Q->Ar始终开辟不成功:进入

     if (ptrAr == NULL)
     {
        fprintf(errLog, "can't malloc for Q->Ar in q_create\n");
        fclose( errLog );
        exit(-1);
     }

   程序出现弹窗:

   “Windows 已在 pso4-26.exe 中触发一个断点。

      其原因可能是堆被损坏,这说明 pso4-26.exe 中或它所加载的任何 DLL 中有 Bug。

      原因也可能是用户在 pso4-26.exe 具有焦点时按下了 F12。

      输出窗口可能提供了更多诊断信息。”

 程序最终截止在:

  retval = HeapFree(_crtheap, 0, pBlock);

 

最终发现问题为:

   mark1 = malloc(SIZE);

   mark2 = malloc(SIZE);这两个变量的定义不正确;

   本意是想变为SIZE个int类型的数组,可是实际上,malloc括号内的size为字节数,导致内存泄露;

   应该为:

   mark1 = (int*) malloc(SIZE * sizeof(int));

   mark2 = (int*) malloc(SIZE * sizeof(int));

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值