gpt4 book ai didi

c++ - 尝试在 C++ 中使用动态数组推送值

转载 作者:行者123 更新时间:2023-11-27 23:08:55 25 4
gpt4 key购买 nike

我正在尝试编写一个函数,将一个项目推送到我动态分配的数组的末尾(不允许使用 vector )。如果列表太小而无法存储下一个数字,一旦它进入该区域将列表的大小加倍,一切都会变得糟糕并开始从计算机反馈给我随机数。谁能看出为什么它没有像预期的那样翻倍?

    int *contents_;
int *temp;
int size_ = 0;
int capacity_ = 1;


void pushBack(int item) /**appends the specified value to DynArray; if the contents array is full,
double the size of the contents array and then append the value **/
{
if (size_ == capacity_)
{
capacity_ = (2*capacity_);
temp = new int[capacity_];
for (int i = 0; i < size_; ++i)
{
temp[i] = contents_[i];
}
delete [] contents_;
contents_ = temp;
}
contents_[size_++] = item;

}

编辑 ** 我忘了说了。这是一个类的功能。这是在标题和 main 中:

 main()
{
DynArray myArray;
myArray.pushBack(2);
myArray.pushBack(3);

myArray.printArray();

return 0;
}

最佳答案

如果这是您的初始设置:

int *contents_; // Junk
int size_ = 0;
int capacity_ = 1;

那么您的代码很可能在第一次执行内存访问冲突时执行:

if (size_ == capacity_)
{
// Not entering here, contents_ remains junk
}
contents_[size_++] = item;

关于c++ - 尝试在 C++ 中使用动态数组推送值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21444833/

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