我在c中有一个小问题,
我用冒泡排序对一些数据进行排序(用tmp更改 b)
让我们看一些代码,您会明白的。
void ft_sort_dico(t_dico **dico)
{
int y;
t_dico *tmp;
tmp = (t_dico *)malloc(sizeof(t_dico));
y = 0;
while (dico[y])
{
if (dico[y + 1] && ft_strcmp(dico[y]->key, dico[y + 1]->key) > 0)
{
tmp = dico[y];
dico[y] = dico[y + 1];
dico[y + 1] = tmp;
y = -1;
}
y++;
}
free(tmp); <- error
}
最佳答案
给定这个发布的代码:
tmp = (t_dico *)malloc(sizeof(t_dico));
y = 0;
while (dico[y])
{
if (dico[y + 1] && ft_strcmp(dico[y]->key, dico[y + 1]->key) > 0)
{
tmp = dico[y];
dico[y] = dico[y + 1];
dico[y + 1] = tmp;
y = -1;
}
y++;
}
free(tmp);
tmp
最初通过调用malloc()
获得指向某些已分配内存的指针然后,此行覆盖了该指针:
tmp = dico[y];
结果是内存泄漏
然后代码将指针传递给
dico
数组中的元素之一(
dico[y]
中的一个)到free()
函数。若要更正此问题,请删除调用
malloc()
的语句并删除调用free()
的语句。顺便说一句:这种排序算法实际上并不执行所需的排序。
建议实施
bubble
或insertion
或selection
排序。这是
selection
排序的算法。其中“ n”是数组[]中的条目数
for ( c = 0 ; c < ( n - 1 ) ; c++ )
{
position = c;
for ( d = c + 1 ; d < n ; d++ )
{
if ( array[position] > array[d] )
position = d;
}
if ( position != c )
{
temp = array[c];
array[c] = array[position];
array[position] = temp;
}
}