根据Allocate string (char*) in another function,我现在有这样的代码:
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添加到链接问题的代码中后,当我尝试释放字符串时,它会冻结。
答案 0 :(得分:3)
您没有为生成的连接字符串分配足够的空间;当您在结束时写入时,您将调用未定义的行为(在这种情况下,可能是堆损坏)。更改malloc
以分配strlen(argv[2]) + strlen(".txt") + 1
,这样您就拥有足够大的缓冲区来容纳整个字符串。
答案 1 :(得分:2)
函数System.out.println("List of Cities:");
for (Vertex v : vertices)
{
System.out.println(v);
}
Scanner k = new Scanner(System.in);
System.out.println("\nEnter start location: ");
int start = k.nextInt();
System.out.println("Enter destination: ");
int destination = k.nextInt();
computePaths(vertices[start]);
System.out.println("\nDistance to " + vertices[destination] + ": " + vertices[destination].minDistance);
List<Vertex> path = getShortestPathTo(vertices[destination]);
System.out.println("Path: " + path);
}
有一个错误。它没有分配足够的内存来追加
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
}
中使用幻数2。如果函数处理argv[2]
,那么将整个数组pf指针argv[2]
作为参数传递是没有意义的。你应该通过argv
。此外,它通过引用使用参数argv[2]
,但不释放参数可以指向的内存。所以它的界面令人困惑。
您可以使用我对问题的回答中显示的功能 Safe way to concat two strings in C
可以像
一样调用该函数string