gpt4 book ai didi

c - 函数在 Release模式下崩溃,但在调试器中运行完美

转载 作者:行者123 更新时间:2023-11-30 15:47:04 25 4
gpt4 key购买 nike

我的程序在第 7 行的这个函数上崩溃,当我在 Release模式下运行时调用 malloc() 时,我收到“Program.exe 已停止工作”消息,当我在调试器,大多数时候它都会成功,但有时我会收到此消息(特别是在较大的输入上): crash

MONOM* polynomialsProduct(MONOM* poly1, int size1, MONOM* poly2, int size2, int* productSize)
{
int i1, i2;
int phSize = 1, logSize = 0;
MONOM* product;

product = (MONOM*)malloc(phSize*sizeof(MONOM));
monomAllocationVerification(product);

for (i1 = 0; i1 < size1; i1++)
{
for (i2 = 0; i2 < size2; i2++)
{
if (logSize == phSize)
{
phSize *= 2;
product = (MONOM*)realloc(product,phSize*sizeof(MONOM));
monomAllocationVerification(product);
}

product[logSize].coefficient = poly1[i1].coefficient * poly2[i2].coefficient;
product[logSize].power = poly1[i1].power + poly2[i2].power;
logSize++;
}
}

mergeSort(product,logSize);
*productSize = sumMonomsWithSamePower(product, logSize);

return product;
}
<小时/>

我知道我正在处理内存错误和问题,但是有没有快速的方法来分析我的代码并查找内存错误?我检查了我的代码十几次,寻找此类错误,但一无所获。 (我不想在这里发布代码,因为它有 420 行长)。

最佳答案

首先,如果在第一个 malloc 上检测到堆损坏,则意味着它发生得更早(不是在此函数中或之前的传递中)。所以问题可能出在这段代码之外。

但是,该代码对我来说也看起来很可疑。

  1. monomAllocationVerification 没有 size 参数,因此它只能在一个 monom 上工作,但在 realloc 之后只调用它一次尽管已经为相当多的单项分配了空间,但仍位于指向第一个元素的指针上。请澄清你的决定。

  2. 有点不清楚为什么 sumMonomsWithSamePower 应该返回一个大小,从而修改一个数组来存储一个值。可能是一个怪癖,但仍然值得怀疑。

更新

问题出在其他函数上;一些大小错误的重新分配。

关于c - 函数在 Release模式下崩溃,但在调试器中运行完美,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17754252/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com