在 strcat 之后释放分配的字符串
Free allocated string after strcat
根据 我现在的代码是这样的:
void someFunction(char** string, char** argv) {
*string = (char*)malloc(strlen(argv[2]) + 1);
strcpy(*string, argv[2]);
strcat(*string, ".txt"); //works fine without this
}
int main(int argc, char** argv) {
char *string;
char *string2;
someFunction(&string,argv);
printf("%s",string);
free(string); // freezes here due the strcat
}
将 strcat 添加到链接问题的代码后,当我尝试释放我的字符串时它冻结了。
您没有为生成的串联字符串分配足够的 space;当您写到最后时,您会调用未定义的行为(在这种情况下,可能是堆损坏)。将 malloc
更改为分配 strlen(argv[2]) + strlen(".txt") + 1
以便您有足够大的缓冲区来容纳整个字符串。
函数 someFunction
有错误。它没有分配足够的内存来追加
".txt"
.
它可能看起来像下面这样
void someFunction(char** string, char** argv) {
*string = (char*)malloc(strlen(argv[2]) + 1 + 4 );
strcpy(*string, argv[2]);
strcat(*string, ".txt"); //works fine without this
}
不过不管怎么说,这个功能的设计还是很糟糕的。它在表达式 argv[2]
中使用幻数 2。如果函数处理 argv[2]
,那么将整个数组 pf 指针 argv
作为参数传递是没有意义的。你应该直接通过 argv[2]
。此外,它通过引用使用参数 string
但不会释放参数可以指向的内存。所以它的界面比较混乱。
你可以使用我对问题的回答中显示的功能
Safe way to concat two strings in C
函数可以这样调用
char *string = getConcatString( argv[2], ".txt" );
if ( string ) puts( string );
free( string );
根据
void someFunction(char** string, char** argv) {
*string = (char*)malloc(strlen(argv[2]) + 1);
strcpy(*string, argv[2]);
strcat(*string, ".txt"); //works fine without this
}
int main(int argc, char** argv) {
char *string;
char *string2;
someFunction(&string,argv);
printf("%s",string);
free(string); // freezes here due the strcat
}
将 strcat 添加到链接问题的代码后,当我尝试释放我的字符串时它冻结了。
您没有为生成的串联字符串分配足够的 space;当您写到最后时,您会调用未定义的行为(在这种情况下,可能是堆损坏)。将 malloc
更改为分配 strlen(argv[2]) + strlen(".txt") + 1
以便您有足够大的缓冲区来容纳整个字符串。
函数 someFunction
有错误。它没有分配足够的内存来追加
".txt"
.
它可能看起来像下面这样
void someFunction(char** string, char** argv) {
*string = (char*)malloc(strlen(argv[2]) + 1 + 4 );
strcpy(*string, argv[2]);
strcat(*string, ".txt"); //works fine without this
}
不过不管怎么说,这个功能的设计还是很糟糕的。它在表达式 argv[2]
中使用幻数 2。如果函数处理 argv[2]
,那么将整个数组 pf 指针 argv
作为参数传递是没有意义的。你应该直接通过 argv[2]
。此外,它通过引用使用参数 string
但不会释放参数可以指向的内存。所以它的界面比较混乱。
你可以使用我对问题的回答中显示的功能 Safe way to concat two strings in C
函数可以这样调用
char *string = getConcatString( argv[2], ".txt" );
if ( string ) puts( string );
free( string );