【发布时间】:2017-11-17 02:15:37
【问题描述】:
我已经定义了一个指针列表。在清除列表之前我应该如何释放所有这些指针?删除所有列表成员的最佳方法是什么?在下面的程序中,是否需要释放为 struct 分配的内存?请参阅我的内联 cmets。
struct MyStruct {
char *data;
int len;
};
typedef std::list<struct MyStruct *> myStruct_list;
myStruct_list l_list;
/* Prepare a list */
for( int i = 0; i < 10; i++) {
struct MyStruct *s = (MyStruct *)malloc(sizeof(struct MyStruct));
s->data = (char*)malloc(MAX_LEN);
get_random_data(s->data,size);
s->len = strlen(s->data);
l_list.push_back(s);
}
/* Delete all members from a list */
myStruct_list::iterator it;
for (it = l_list.begin(); it != l_list.end(); ++it) {
if (*it) {
free(*it); // --->> do I need to free (*it)->data ?????
}
}
l_list.clear();
【问题讨论】:
-
你为什么还要在这里使用指针?我认为没有理由这样做,如果您删除它们,那么您不必担心泄漏:)
-
你为什么使用malloc?这段代码有一半看起来更像 c 而不是 c++。
-
std::list<struct MyStruct *>::iterator it;对不起,你是过去的人吗?说真的,如果你在这里没有使用一些遗留系统,你真的需要更新你的学习材料。 -
抱歉,这是示例程序。我刚开始学习C++。我想了解指针和 STL 容器。所以我写了示例程序。
-
s[len] = '\0';不会很好结束,与其自己分配和终止字符串,不如考虑使用std::string。