我试图释放我在另一个函数中的一个函数中分配的一些内存。这方面的一个例子是:
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);
}
我在该函数中有malloced内存,但现在我试图在不同的函数中释放这个malloced内存,例如我的main函数。我该怎么做?
答案 0 :(得分:1)
只需使用相应的释放函数free()
请记住,你根本不能使用已经释放的内存。
需要考虑的一些要点:
newRecord = malloc(sizeof(MusicRec));
newRecord = malloc(sizeof *newRecord);
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;
}
答案 1 :(得分:0)
如果您已将该变量作为另一个函数的引用传递,则可以使用free()函数从该函数中释放该变量;否则,如果你已通过值传递,则无法从另一个函数中释放该变量。