c ++中指针变量的内存释放

时间:2017-07-17 20:08:11

标签: c++ memory-management

如果我通过以下行获取一块内存。

// (example) source dict
let dict: [String: AnyObject] = ["foo": "1" as AnyObject,
                                 "bar": 2 as AnyObject,
                                 "baz": "3" as AnyObject]

// target dict
var targetDict = [String: String]()
for (key, value) in dict {
    if let value = value as? String { targetDict[key] = value }
} // targetDict: ["foo": "1", "baz": "3"]

然后为了释放内存,代码将是

int* a = new int[10];

但是,如果我采用单个内存段的指针,如下所示

delete [] a;

然后插入一组数据,如下所示。

int* a = new int;

所以要释放指针“a”所指向的第一个内存段,代码将如下所示

for(int i=0;i<10;i++)
 {
    a[i]= i ;
 }

但是在这里我从指针“a”指向的内存中插入 9 更多数据。所以我在这里实际使用了10个内存段。我如何释放所有这10个内存?请帮我解决。

3 个答案:

答案 0 :(得分:5)

  

如何释放所有这10个内存?

你不能也不应该因为当你试图“插入一系列数据,如下面的”时,你已经输入了Undefined Behavior土地,写入你没有的位置首先使用new进行分配。你问了一个int,你有一个int。不要写过去。

答案 1 :(得分:1)

您只分配了一个int。从a[1]a[9]的内存可能会分配给其他对象,您可能会损坏它们。

P.S。顺便说一句,你无法释放你在任何情况下都没有分配的记忆。

答案 2 :(得分:0)

new int一个 int值分配空间。你不能合法地假装它是一个包含十个int值的数组,如果你越界,编译器就不会生成扩展分配内存的代码。您编写的代码会产生未定义的行为。它编译和运行的事实并没有改变这一点;迟早会引起问题。

要分配可容纳10个int值的数组,请使用第一个表达式:new int[10]。这将为 int值分配空间。

要分配可以随意扩展的数组,请使用std::vector<int>