C语言 释放内存,函数



我试图在另一个函数中释放我在一个函数中分配的一些内存。一个这样的例子是:

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: 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()函数从该函数中释放该变量;

相关内容

  • 没有找到相关文章

最新更新