如果我通过以下行获取一块内存。
// (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个内存?请帮我解决。
答案 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>
。