C中的内存分段失败

时间:2018-11-16 21:15:53

标签: c

我只是在用C进行练习,编写了一些简单的I / O应用程序。测试运行(构建和运行)没有任何错误或警告,但实际的应用程序(以及调试器)正在泄漏内存。
我简化了该应用程序,因此现在只有该功能正在泄漏内存。

char *new_name(char *old_name, char *operation)
{
    char file_num[2];

    char *edited_name = ( char* ) malloc( strlen( old_name ) + strlen( operation ) );
    strcat( edited_name, old_name );
    strcat( edited_name, operation );

    // Iterate through names of new file to see which doesn't exist
    int fnum = 1;
    char *tempname = ( char* ) malloc( strlen( old_name ) + strlen( operation ) + sizeof( file_num ) + sizeof( ".txt" ) );
    do
    {
        strcpy( tempname, edited_name );
        sprintf( file_num, "%d", fnum++ );
        strcat( tempname, file_num );
        strcat( tempname, ".txt" );
    } while ( file_exists( tempname ) );
    free(edited_name);

    return tempname;
}

int main()
{

    char *old_name = "textfile";
    char *operation = "_join";
    char *out_name = new_name(old_name, operation);

    printf( "%s", out_name );

    return 0;
}

我还试图仅通过计算字符数来将malloc()“公式”更改为int值,但它似乎对我不起作用(仍然相信问题在那里,但我无法解决)它)。

P.S。 file_exists非常简单,只返回一个 int

1 个答案:

答案 0 :(得分:1)

当然是内存泄漏。 有两个malloc,但只有一个free

您必须free out_name离开main之前和最后一次使用之后。