【发布时间】:2011-11-27 16:42:04
【问题描述】:
我正在使用我的自定义字符串库,顺便说一句,这很糟糕,但我这样做是为了经验。
无论如何,我有一些函数可以为String* 分配一块内存以供使用,并且工作正常。当调用string_delete(string*) 函数时,所有使用的内存都会被释放。
但是我想出了一种将char*s 表示为String*s 的新方法,但我担心我为它保留的内存不会被释放。这是函数:
String* String_ToN(char* dest) {
String* temp = calloc(1, sizeof (struct String));
temp->length = strlen(dest);
temp->buffer = (char*) malloc(temp->length + 1);
strncpy(temp->buffer, dest, temp->length);
return temp;
}
我不喜欢使用strdup,因为它不是标准c,所以我会坚持使用malloc 和strncpy。
这行得通,我用它的目的是这样的:
String_GetLength(String*) 接受一个String* 参数,所以如果我在调用它时输入一个字符串文字,我会得到一个错误。
所以我改为使用String_GetLength(String_ToN("hello")),它会返回 5,就像我预期的那样。
但再次在String_ToN 中我使用calloc 和malloc,我将如何释放这些内存并仍然能够使用ToN?
【问题讨论】:
标签: c string memory-leaks struct memory-management