我试图在另一个函数中释放我在一个函数中分配的一些内存。一个这样的例子是:
MusicRec * createRecord(char * title, char * artist, double fileSize, int length, char theType)
{
MusicRec * newRecord;
MusicRec * next;
newRecord = malloc(sizeof(MusicRec));
newRecord->title = malloc(sizeof(char)*(strlen(title))+1);
strcpy(newRecord->title, title);
newRecord->artist = malloc(sizeof(char)*(strlen(artist))+1);
strcpy(newRecord->artist, artist);
newRecord->sizeInKB = fileSize;
newRecord->lengthInSeconds = length;
newRecord->type = theType;
newRecord->next = NULL;
next = NULL;
return(next);
}
我在那个函数中有错置的内存,但现在我试图在另一个函数中释放这个错置的内存,比如我的主函数。我该怎么做呢?
请使用相应的释放函数free()
。记住,您根本不能使用已经释放的内存。
需要考虑的几点:
- 最好改变你分配内存的方式,这样你可以更容易地改变类型:
- Was:
newRecord = malloc(sizeof(MusicRec));
- 应为:
newRecord = malloc(sizeof *newRecord);
考虑为你经常做的事情定义一些辅助函数。示例(此函数通常实际上已经定义): - Was:
- Was:
newRecord->title = malloc(sizeof(char)*(strlen(title))+1);strcpy(newRecord->title, title);
- 应该是:
newRecord->title = strdup(title);
sizeof(char)
:它看起来很文盲,因为你实际上是在问:我需要保存多少个字符?对于没有定义的情况:
char* strdup(const char* str) {
size_t len = strlen(str) + 1;
char* ret = malloc(len);
memcpy(ret, str, len);
return ret;
}
如果你已经从另一个函数传递了该变量作为引用,那么你可以使用free()函数从该函数中释放该变量;