(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));

 

引用\[2\]中提到,语句int *returnSize = malloc(sizeof(int))给指针变量returnSize分配了一个整型存储空间。这意味着returnSize指针变量现在可以用来存储一个整数值。需要注意的是,在使用指针变量之前,必须先为其分配相应的内存空间,否则会导致程序异常。 #### 引用[.reference_title] - *1* [(int*) malloc(SIZE * sizeof(int)) 惨痛教训](https://blog.csdn.net/Ssure/article/details/8977386)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [C语言(int *)malloc(sizeof(int))的作用与意思](https://blog.csdn.net/u014183815/article/details/107336736)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [‘sizeof’ on array function parameter ‘array’ will return size of ‘int*’](https://blog.csdn.net/weixin_43737395/article/details/123233550)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值