【发布时间】:2015-12-31 19:15:25
【问题描述】:
我有一个 c++ 程序,如果用户输入更多元素,它的一部分会增加指针的大小。该指针具有与结构 Entry 关联的类型,增加指针大小的函数是
Entry *size_increase(Entry *neuu, int *size){
*size = *size+10;
Entry *new_neu = new Entry[*size];
for (int i=0; i<*size; ++i) {
new_neu[i]=neuu[i];
}
return new_neu;
}
指针neuu是要增加的指针,size是它的初始大小。在此函数结束时,我想删除输入指针 neuu,以释放内存。
问题是:如果我有这个序列
delete neuu;
return new_neu;
编译器在接受两个用户输入并打印错误后停止,而不是上面代码中的那个
对象 0x1002042b8 的错误:未分配被释放的指针
那我怎样才能删除指针呢?
编辑:一些用户询问最初如何分配 neuu。最初我有
Entry *neu = new Entry[1];
并且每当用户尝试输入第二个项目时,都会调用一个函数
neu = size_increase(neu,size);
这两个都发生在 main 函数中。
【问题讨论】:
-
我们看不到为
neuu分配内存的代码。我猜它永远不会被分配。你能显示调用size_increase的代码吗? -
您应该使用
delete[]来表示数组。 -
尽可能避免使用
new,改用std::vector -
但是如果它没有为neuu分配任何内存那么它就不会运行。无需删除代码即可完美运行。我想在这里提一下代码,但又怕它弄乱了页面。
-
@JameyD 你是对的。谢谢。考虑将您的回复添加为答案:)