C 释放内存、功能
我正在尝试释放我在一个函数中分配给另一个函数的一些内存。这方面的一个例子是:C 释放内存、功能,c,linked-list,malloc,C,Linked List,Malloc,我正在尝试释放我在一个函数中分配给另一个函数的一些内存。这方面的一个例子是: MusicRec * createRecord(char * title, char * artist, double fileSize, int length, char theType) { MusicRec * newRecord; MusicRec * next; newRecord = malloc(sizeof(MusicRec)); newRecord->title = malloc(sizeof
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内存,比如我的主函数。我该怎么做?只需使用相应的释放函数
free()
记住,您根本无法使用已释放的内存
需要考虑的几点:
- 最好更改分配内存的方式,以便更轻松地更改类型:
- Was:
newRecord=malloc(sizeof(MusicRec))代码>
- 应该是:
newRecord=malloc(sizeof*newRecord)代码>
- Was:
- 考虑为您经常做的事情定义一些辅助函数。示例(此函数通常已经定义):
- Was:
newRecord->title=malloc(sizeof(char)*(strlen(title))+1);strcpy(新记录->标题,标题)代码>
- 应该是:
newRecord->title=strdup(title)代码>
- Was:
- 永远不要使用
:它看起来不识字,因为你实际上是在问:我需要多少个char才能保存一个charsizeof(char)
char* strdup(const char* str) {
size_t len = strlen(str) + 1;
char* ret = malloc(len);
memcpy(ret, str, len);
return ret;
}
如果已将该变量作为引用从另一个函数传递,则可以使用free()函数从该函数中释放该变量;否则,如果按值传递,则无法从另一个函数中释放该变量。在一个函数中分配内存,在另一个函数中释放内存是有问题的。你不能在主函数中分配它,将分配的内存传递给另一个函数,然后在返回主函数后再次释放它吗?该函数的奇怪之处在于你声明了两个指针,但实际上你只使用了
newRecord
指针。但是,将未使用的指针设置为NULL
后,返回该指针。结果是函数总是返回NULL
,对新分配的内存不做任何处理。该函数可能会返回newRecord
@Dour:你真的是这个意思吗?你将如何构建任何抽象?在一个地方malloc
,在另一个地方free
都很好。如果我正在释放结构的一个元素,它还能工作吗?你确定吗?可以通过值将指针传递给另一个函数,然后在另一个函数中释放指针。至关重要的是,不要在原始函数中再次使用指针。类似地,您可以将分配的指针返回给调用函数,调用函数可以安排释放指针。所以,我认为你的陈述不准确。我已经在我的代码中使用了这种类型的东西,如果你传递了指针的引用,它将从另一个函数中释放内存。你是说这段代码不起作用:void分配器(size\u t size){void*vp=malloc(size);releaser(vp);}
和void releaser(void*vp){free(vp);}
?指针是通过值从allocator()
传递到releaser()
,但是releaser()
可以释放它。或者你是在想void int-alloc(size\t n){int*data=malloc(n*sizeof(*data));int-free(data[0])}
其中int-free()
无法写入以释放作为参数传递的整数?