c中字符串数组的内存泄漏
Memory leak with string arrays in c
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] = '[=10=]';
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 );
}
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] = '[=10=]';
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 );
}