gpt4 book ai didi

c - 双自由或腐败(fasttop)

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

大家好,我有一个像这样的数组大小调整函数

int
add_time_element (time_t *array, time_t element, size_t *size)
{
if (NULL == array)
{
return STATUS_FAIL;
}

int status = STATUS_SUCCESS;
time_t *tmp = NULL;
size_t local_size;

(*size)++;
local_size = *size;

printf ("Local size %lu\n", local_size);

tmp = realloc (array, local_size * sizeof (time_t));
if (NULL == tmp)
{
status = STATUS_FAIL;
}
else
{
array = tmp;
}

if (STATUS_FAIL == status)
{
(*size)--;
}
else
{
array[local_size - ONE] = element;
}

return status;
}

我这样调用这个函数..

  time_t *dates = NULL;
dates = malloc (ONE);
for (slot_index = ZERO; slot_index < data_provider->n_slots; slot_index++)
{
printf ("Testing\n");
/*slot = data_provider->slots[slot_index];
date = get_date (slot->start_time);*/
date += ONE;
if (STATUS_FAIL == add_unique_time_element (dates, date, &n_dates))
{
free (dates);
dates = NULL;
return STATUS_FAIL;
}
}

我在 realloc 函数中遇到 double free(fasttop) 错误..

而valgrind分析报告说

Invalid free() / delete / delete[] / realloc()
==22491== at 0x4C2DD9F: realloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==22491== by 0x402BA3: add_time_element (array_util.c:353)
==22491== by 0x402C6C: add_unique_time_element (array_util.c:399)
==22491== by 0x401F92: create_dates (data_provider.c:283)
==22491== by 0x401D7D: create_data_provider_file (data_provider.c:174)
==22491== by 0x4075CC: main (data_provider_test.c:13)
==22491== Address 0x5b63170 is 0 bytes inside a block of size 1 free'd
==22491== at 0x4C2DD9F: realloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==22491== by 0x402BA3: add_time_element (array_util.c:353)

请帮忙。

最佳答案

你的函数原型(prototype)是

整数
add_time_element (time_t *array, time_t element, size_t *size)

你正在改变你例程中的数组,但它并没有反射(reflect)在调用者身上,你正在改变数组副本> 指针。

所以,下次你调用你的例程时,如果 array 在某个时候被 realloc 改变了,因为它需要更多的大小(不会系统地发生),你'传递一个已经释放的指针。

可能的修复:

  • 返回 array 而不是你的状态(失败时返回 NULL 就可以了)
  • array 作为 time_t **array 传递,并在您的例程中将其作为 *array 引用(并调用 &array)

(第一个选择更简单)

注意:您的其余代码针对错误处理编写得非常好(这很讽刺)

关于c - 双自由或腐败(fasttop),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42159456/

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