考虑下面的代码片段谁负责释放分配的内存?
void xyz(CString **mapping)
{
*mappings = new CString[10];
(*mappings)[0] = "hello";
//...
}
void main(int argc, char **argv)
{
CString *tmp;
xyz(&tmp);
// now we have the CString array defined in xyz
}
我想要做的是,以填补因主峰的VAR与由另一个函数生成一些值。我读了它的最佳做法,即删除/释放与分配的功能相同的功能。这在这种情况下是不可能的,因为xyz
存在的唯一原因是生成数据(这仅仅是一个例子,在实际情况下,在xyz ;
中会有更多复杂性))。我也考虑在main中的堆栈上创建一个数组,并将它传递给函数,但在我的情况下,数组的大小在当时不是固定的(它在xyz
中确定)。清理分配内存的最干净和最常用的方法是什么? 如果我们有方法xyz
的对象,那么最佳实践是什么?要创建另一个方法(例如freeMapping()
),在处理数据后必须由调用方调用?
C或C++,决定。因为在C++中,你只需使用'std :: vector'。 – 2012-03-13 23:04:05
如果您正在研究C++,那么将分配的数据包装到一个对象中,该对象在超出范围时释放内存。 – Tony 2012-03-13 23:04:09
上次编辑将问题从C++改为C,这会使答案失效。如果您有新问题,请在网站上进行搜索,如果失败(不会),请提出新问题。 – 2015-05-11 18:29:07