C++ 释放向量中的malloced char*?
我们得到:C++ 释放向量中的malloced char*?,c++,memory-leaks,malloc,free,C++,Memory Leaks,Malloc,Free,我们得到: typedef const char* V; typedef std::vector<V> Record; 我们通过malloc向其填充数据: void fixed_len_read(void *buf, int size, Record *record){ char *c_buf = (char *)malloc(size); memcpy(c_buf, buf, size); record->push_back(c_buf); } 现
typedef const char* V;
typedef std::vector<V> Record;
我们通过malloc向其填充数据:
void fixed_len_read(void *buf, int size, Record *record){
char *c_buf = (char *)malloc(size);
memcpy(c_buf, buf, size);
record->push_back(c_buf);
}
现在使用后,我希望释放分配的内存。它会自己消失吗?还是必须释放()每个元素?
我试着这样打免费电话:
for (int i =0; i < 100; i++) {
free(record.at(i));
}
然后我用了一个石膏:
for (int i =0; i < 100; i++) {
free((char *) record.at(i));
}
for(int i=0;i<100;i++){
自由((字符*)记录在(i));
}
现在它似乎在运行,但我不确定它是否有效?看起来对吗
[编辑]根据下面的评论和回答。铸造它是好的。另一种方法是使用delete(),如下所示: (C的free有一个问题,在C++中的delete()中修复了这个问题。您所做的(我很确定)在技术上是允许的。但是,使用
malloc
aconst char*
确实没有意义,因为如果没有强制转换,您将无法在分配后初始化内存
free
接受一个void*
,这就是为什么当您向它传递一个const char*
时编译器会抱怨的原因const
指针不能隐式转换为void*
。当您使用(char*)
丢弃常量
时,您可以使其可转换,并且free
可以接受该变量
要回答您的问题,是的,您确实需要在销毁向量之前释放每个元素。它不会自己发生的
说实话,你的教授给你的密码完全是胡说八道。如果您谈论的是二进制数据,那么您可能应该使用std::vector
,而不是vector
。如果您真的持有字符串,std::vector
更有意义。这样,内存就会自动释放,因为容器的析构函数会处理它。每个人都是C/C++语言的新手。请用一个标签,很奇怪。他想让你学习如何编写容易出错且难以维护的代码,有什么特别的原因吗?找一位新教授。嗯。。。也许我们需要AssignmentReview.SE打开?谢谢你的回答。唯一的一件事,我们不需要一个常量字符。我们malloc一个char*?对,你malloc一个char*
,但是几乎立刻通过把它推到向量中来分配它const char*
。这很好,但你需要先把它扔回去,然后才能释放它。好吧,这似乎是有道理的。
" error: no matching function for call to 'free'
free(record.at(i));"
for (int i =0; i < 100; i++) {
free((char *) record.at(i));
}