【发布时间】:2014-02-03 19:28:46
【问题描述】:
我正在创建一个程序,其中通过此过程创建结构:
TokenizerT *TKCreate(char *separators, char *ts) {
TokenizerT * inu = malloc(sizeof(*inu));
char * sts = malloc(strlen(ts)*sizeof(char));
char * by = malloc(lim*sizeof(char));
strcpy(by, yr);
strcpy(sts, ts);
inu->sep = by;
inu->toks = sts;
return inu;
}
我需要通过另一个函数释放 struct inu,但我下面的函数似乎只释放了与 TokenizerT.sep 关联的内存
void TKDestroy(TokenizerT *tk) {
free(tk->sep);
free(tk->toks);
}
如何释放 tk.sep 和 tk.toks?
编辑:free(tk) 导致此错误:“malloc: * 对象 0x7fff55662bd8 的错误:未分配指针被释放 * 在 malloc_error_break 中设置断点进行调试"
EDIT2:结构定义
struct TokenizerT_ {
char * sep;
char * toks;
};
还有
void TKDestroy(TokenizerT *tk) {
free(tk->sep);
free(tk->toks);
free(tk);
}
导致在 EDIT 1 中指定的相同错误
编辑 3:我还添加了我的主要方法:
int main(int argc, char **argv) {
char * arr = argv[1];
char * y = argv[2];
TokenizerT jer = *TKCreate(arr, y);
TKDestroy(&jer);
return 0;
}
【问题讨论】:
-
在
free(tk->sep); free (tk->toks);之后使用free(tk);怎么样? -
您从未分配过 tk->sep 或 tk->toks。从这样做开始。在帖子的某处显示您的结构定义也很好。可能会产生更有洞察力的回复。
-
@gmorrow 仍然导致错误
-
参考Jerry_J给出的答案。它包含修复代码所需的所有详细信息。 @ryyker:请注意,他实际上已经为他们两个都做了 malloc!
-
free(tk)不是free(toks)和TokenizerT *inu = malloc(sizeof(*inu));
标签: c