我正在使用算法MOOC,并且有一个小程序,它以任意顺序获取一个整数的数组A,计算反转的数量(反转是数组索引的对(i,j)
的数量{ {1}}和i<j
)。
以下是我写的代码。我试图用“分而治之”的方法解决它,我们递归地将输入数组分成两半,在计算反转时单独对每一半进行排序,然后合并两半。
诀窍是我需要跟踪反转次数和对数组进行排序,因此我将原始数组作为参数传递给各种递归调用并传递计数反转作为返回值。
代码通过连续分割和排序[1,5,3]的第一组递归调用正确执行,但是当我进入mergeAndCountSplitInv的第3次调用时,它崩溃在该行:
A[i] > A[j]
错误:
sortedArrayLeft = realloc(sortedArrayLeft, sizeof(int)*(rightLen + leftLen));
我无法看到我没有正确使用malloc的地方,我已经梳理了这个检查以确定我正在正确地进行指针运算并且无法发现任何错误,但显然存在错误。
感谢任何帮助。
malloc: *** error for object 0x100103abc: pointer being realloc'd was not allocated
答案 0 :(得分:3)
这是因为函数返回后sortedArrayLeft
的值会丢失。如果inArray
需要重新分配和复制,sortAndCount
的{{1}}可能指向释放的内存。
为了解决这个问题,请将指针传递给指针,让realloc
传播回sortedArrayLeft
的{{1}}:
inArray