gpt4 book ai didi

c - c中字符串数组的内存泄漏

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

char **add_string(char **existing, const char *string){
size_t size = 0;
while (NULL != existing[size])
{
++size;
}
char **arr = realloc(existing, (size + 2) * sizeof *arr);
arr[size] = malloc(strlen(string) + 1);
strcpy(arr[size], string);
arr[size+1] = '\0';
return arr;
}

void free_strings(char **strings)
{
size_t size = 0;
while (NULL != strings[size])
{
free(strings[size]);
++size;
}
}

我在一行有内存泄漏

char **arr = realloc(existing, (size + 2) * sizeof *arr);

我认为现有内存应该在使用 realloc 时被释放?如何修复此内存泄漏?

编辑:添加了我的 free_string 函数和我用来运行程序的主要函数。

最佳答案

您没有将空指针附加到指针 existing 指向的数组。因此在这个循环中

while (NULL != existing[size]) { ++尺寸;

函数有未定义的行为。

看来你的意思是下面的

char ** add_string( char **existing, const char *string )
{
size_t size = 0;

while ( NULL != existing[size] ) ++size;

char **arr = realloc( existing, ( size + 2 ) * sizeof *arr );

if ( arr != NULL )
{
arr[size] = malloc( strlen( string ) + 1 );
strcpy( arr[size], string );
arr[size+1] = NULL;
}

return arr;
}

free_strings 函数也不正确。它应该看起来像

void free_strings( char **strings )
{
size_t size` = 0;

do
{
free( strings[size] );
} while ( strings[size++] != NULL );

free( strings );
}

关于c - c中字符串数组的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42007510/

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