gpt4 book ai didi

C++动态数组,增加容量

转载 作者:太空宇宙 更新时间:2023-11-04 13:49:02 24 4
gpt4 key购买 nike

我正在尝试实现一个动态数组,这是我增加容量的函数

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: * error for object 0x7f9742403910: pointer being freed was not allocated * set a breakpoint in malloc_error_break to debug

我是这样调用它的:

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;
}

最佳答案

我认为您的问题一定来自两件事 IMO:

首先:

changeCapacity(arr, length, capacity);
arr[length] = val;

这里你没有得到新的 arr 值(由 changeCapacity() 返回)。因此,您的函数 addElement() 将返回错误的指针,并且在您的下一个 addElement() 上会造成空闲内存损坏。

为什么一定要获取新的arr值?

你和这里一样

a = 1;
changeVar(a);
// value of a here?

int changeVar(int a)
{
a = 5;
return (a);
}

a 的值如何? 1 因为 changeVar 的参数是局部变量。

第二:

你给你的 addElement() 函数一个 NULL 值。

关于C++动态数组,增加容量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24310386/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com