【发布时间】:2014-06-19 15:26:40
【问题描述】:
我正在尝试实现一个动态数组,这是我增加容量的函数
int* changeCapacity(int *arr, int length, int newCapacity) {
int *newArr = new int[newCapacity];
if(length > newCapacity){
return 0;
} else {
for(int i = 0; i < length; i++){
newArr[i] = arr[i];
}
delete[] arr;
arr = newArr;
return arr;
}
}
这是我得到的错误:
speicher(2465,0x7fff7cfc2310) malloc: * 对象 0x7f9742403910 的错误:未分配被释放的指针 * 在 malloc_error_break 中设置断点进行调试
我这样称呼它:
int* addElement(int *arr, int& length, int& capacity, int val){
if(length >= capacity){
capacity = capacity * 2;
changeCapacity(arr, length, capacity);
arr[length] = val;
length += 1;
return arr;
}else{
arr[length] = val;
length += 1;
return arr;
}
}
【问题讨论】:
-
如果
length > newCapacity,你正在泄漏内存。 -
您正在使用 C++。使用
std::vector<int>会处理所有这些问题。然后你就可以早点回家了。 -
你能告诉我们你是如何调用这个函数的吗?
-
你为什么认为他是他?
-
arr[length]超出length对象数组的范围,但我认为这不是问题所在。这两个函数都没有调用free(),所以我认为问题可能出在其他地方......另外,在changeCapacity()中,我认为对于新请求的容量小于现有容量的情况返回 0 可能不是明智的设计选择...
标签: c++ arrays dynamic capacity