gpt4 book ai didi

c - 无法在 mergeSort 函数中释放内存

转载 作者:太空宇宙 更新时间:2023-11-04 01:17:59 24 4
gpt4 key购买 nike

我尝试用 C 编写一个 mergeSort 函数。在函数中,我有指针 atmp;他们的值(value)是不同的。但是我无法释放 tmp 指向的内存。

(我用 VS2013 在 .cpp 文件中编写它,Windows 10)

breakpoint result before I run the free function.bmp

inline int min(const int x, const int y)
{
return x < y ? x : y;
}

void mergeSort(int array[], int len)
{
len--; //index: 0 ~ len-1
int *a = array;
int *tmp = (int *)malloc(sizeof(int)*len);

for (int seg = 1; seg < len; seg += seg)
{
for (int start = 0; start < len; start += seg+seg )
{
int k = start;
int start_1 = start;
int end_1 = min(start_1 + seg-1, len);
int start_2 = end_1+1;
int end_2 = min(start + seg + seg-1, len);
while (start_1 <= end_1 && start_2 <= end_2)
{
tmp[k++] = a[start_1] < a[start_2] ? a[start_1++] : a[start_2++];
}
while (start_1<=end_1)
{
tmp[k++] = a[start_1++];
}
while (start_2 <= end_2)
{
tmp[k++] = a[start_2++];
}
}
int *t = a;
a = tmp;
tmp = t;

}
if (a != array)
{
for (int i = 0; i <= len; i++)
{
tmp[i] = a[i];
}
tmp = a;
}

free(tmp); // fail to free pointer tmp in mergeSort function ??

}

最佳答案

当您分配给 tmp(例如 tmp = atmp = t)时,您将丢失原始指针。

如果 a 没有分配给 malloc 那么将新指针传递给 free 将导致 undefined behavior .

至于可能的解决方案,保留一份原始指针的副本,您可以将其传递给 free

关于c - 无法在 mergeSort 函数中释放内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52585734/

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