C++不断增加阵列大小
Keep increasing array size C++
我是C++新手,我试图允许用户继续在数组中输入双精度,当用户输入 -1 时程序停止。我的代码有效,但是当将 12 个项目添加到数组中时,我收到以下错误:
*** glibc 检测到 *** ./练习 2: 双重释放或损坏 (输出): 0x00000000010aa070 ***
========
======= 回溯: =
和:
已中止(核心已转储)
这是我的代码:
int main(){
int size=5;
int i=0;
double *numbers = new double[size];
cout<<"Enter your double:"<<endl;
while(1){
double *numbers2=new double[size];
cin>>numbers[i];
if(i>=size-1){
size=size*2;
memcpy(&numbers2, &numbers, size);
delete[]numbers;
numbers=numbers2;
}
if(numbers[i]==-1){
break;
}
cout<<numbers[i];
i++;
}
}
我建议简化问题并使用std::vector
#include <vector>
int main()
{
std::vector<double> numbers;
// get numbers and push into vector if valid
double x;
cin >> x;
numbers.push_back(x):
}
有几个问题:
1) size
可以是数组中元素的数量,也可以是数组的内存大小。 目前没有double
大小为 1 个内存单元的体系结构。
2)删除数组后,确实应该使用新计算的大小重新分配它。 否则,写入已删除的内存是未定义的行为。 在这种情况下,它可能会导致坏事发生,例如段错误。
3)比较等式的浮点值是有问题的。
我稍微重写了代码以解决所有这些问题。
using namespace std;
int main()
{
int size=5;
double *numbers = new double[size];
cout << "Enter your double:" << endl;
for (int i=0; ; ++i)
{
cin >> numbers[i];
if (i >= size-1)
{
size *= 2;
double *numbers2 = new double[size];
if (!numbers2)
{
cerr << "failed allocating memory" << endl;
exit(1);
}
memcpy (numbers2, numbers, sizeof double * (size/2));
delete[] numbers;
numbers = numbers2;
}
// compare for -1 within epsilon of 1e-7
if (abs (numbers[i] + 1) <= 1e-7)
break;
cout << numbers[i];
}
}
相关文章:
- 数组索引的值没有增加
- OpenMP阵列性能较差
- 为什么我的代码在输出中增加了93天
- ActiveMQ使用者的内存使用量在onMessage调用后不断增加
- 不断增加的指针数组 错误:赋值中的类型不兼容
- C 阵列值随机增加一个
- 如果我们可以将特定数组元件增加/减少1,则最小总移动到平衡阵列
- 我的值不断增加,而不是在循环语句中重置
- C++不断增加阵列大小
- 当使用动态数组时,循环中的内存使用量不断增加.(C++)
- 随着C++程序的运行,内存使用量不断增加
- Arduino Serial.available() 不断增加
- 增加阵列C++的最有效方法
- gtkmm应用程序内存使用量不断增加
- 不断增加物理内存Visual c++ CryptMsgClose和CryptReleaseContext
- 在AIX上,VSZ和RSS不断增加
- 信号量句柄的数量不断增加
- 尽管初始大小固定,但用于跟踪对象的边界框/ROI 的大小仍在不断增加
- Linux:为什么 smaps 中的值会不断增加
- c++ -不断增加一个整数