gpt4 book ai didi

c++ - 在 C++ 中扩展数组

转载 作者:行者123 更新时间:2023-11-30 00:51:29 25 4
gpt4 key购买 nike

好吧,我在网上搜索了关于动态扩展数组的内容,发现在 C++ 中是不可能的。我必须使用 C 版本的 mallocrealloc 或 C++ 中的 std::vector。但下面的代码似乎工作得很好。

#include<iostream>
using namespace std;
int main() {
int len = 10;
int *p = new int[len];
for (int i = 0; i < len; i++){
p[i] = i + 1;
}
*(p + len) = 1000; // extend here.
len++;
for (int i = 0; i < len; i++){
cout << p[i] << endl;
}
return 0;
}

那么如果我在大程序中使用这种方式,有什么问题吗?为什么人们说这是不可能的?如果是因为扩展区域可能已经被其他信息或其他东西填满了?我只想知道上面的做法对不对。如果不是,那究竟是为什么?

最佳答案

这有时会起作用,因为写入未分配的内存是未定义的行为。当操作系统因为调皮而杀死你时,最终注销数组的末尾会让你出现段错误。

如果您需要可调整大小的数组,请使用 C++ std::vector。缺点几乎为零。它为您处理重新分配和取消分配的所有复杂情况。它还会在调整大小时做正确的事情,以便附加到数组的分摊时间为 O(1)。

可以使用realloc 来调整数组的大小,但它有可能被复制到新位置。 但是不能对你用new创建的东西使用realloc!它一定是用 malloc 和 friend 分配的。 newnew[] 必须与 deletedelete[], malloc和 friend 一起去 free

如果您使用 C 函数在 C++ 程序中分配内存,则会遇到其他危险。 C 函数不会在为用户定义或标准库类型分配的数组上运行构造函数。

简而言之,直接分配和调整数组大小充满了陷阱,当我们有一个很棒的类在 std::vector 中自动做正确的事情时,这是不值得的。

关于c++ - 在 C++ 中扩展数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21629230/

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