gpt4 book ai didi

c++ - 动态分配

转载 作者:搜寻专家 更新时间:2023-10-31 01:10:08 26 4
gpt4 key购买 nike

是否可以使用以下代码模拟动态分配的行为。例如,我们不知道存储在文件中的整数的确切数量,我们将读取该文件,然后将其存储在一个名为 Hello 的数组中。

int x;
int n=0;
ifstream input("a.dat");
while (!input.eof())
{
input >> x;
n++;
}
input.close();

int Hello[n];
cout << "n= " << n << endl;

int i=0;
while (!input.eof())
{
input >> Hello[i];
i++;
}

最佳答案

Is it possible to mimic the behavior of dynamic allocation using the following code.

不,主要区别在于程序中的数组存储在堆栈上,而所有动态内存分配都发生在堆上。

您正在做的是,在您的代码中使用 C++ 中 C 的 C99 标准的 VLA 功能。使用 g++ 编译器中的 -pedantic 选项进行编译将揭示这一点。由于 C++ 不直接支持它,并且它是一种特定于实现的语言扩展,如果您的目标是编写可移植代码,那么使用它并不是一个好主意。

VLA 的使用 alloca() , 在运行时在堆栈上分配内存,并讨论了这种技术的缺点 here .

此外,VLA 在运行时在堆栈上分配内存,如果值超出范围,程序只会崩溃,而使用 VLA 快速创建几个字节的数组是可以的,创建不确定数量的大内存可能不会为了安全起见,最好使用动态内存分配来处理。

关于c++ - 动态分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16259506/

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