我已经创建了一个程序来接受来自用户的浮点输入以创建动态数组(然后使用那些带有函数的输入来查找基本的东西,如max,min,sum,avg但是那些东西工作得很好所以我不这样做为了不创建代码墙,我认为Ill包含在这里。
它的工作时间大约是一半时间,虽然我有一些关于原因的理论但我无法解决问题。
int main() {
int Counter = 0;
float *UsrIn = nullptr;
float Array[Counter];
我的第一个想法是下面的部分是问题。我的班级并没有真正考虑使用我记忆中的新符号(我假设它指的是字节,所以也许科学符号可以工作)。我只是为了测试而尝试了20,它似乎工作(事后看来可能是一个愚蠢的假设)。
UsrIn = new float[(int)20];
cout << "Enter float numbers:" << endl;
cout << "Enter '9999999' to quit:" << endl;
cin >> *UsrIn; // User Input for pointer Dynamic Array
Array[Counter] = *UsrIn;
while(*UsrIn!=9999999) // User Input for Dynamic Array
{
Counter++;
UsrIn++;
cin >> *UsrIn;
Array[Counter] = *UsrIn;
}
delete UsrIn;
delete[] UsrIn;
我的另一个想法是,指针地址可能已被其他东西使用,或者它可能在某种程度上无效。我不知道有哪种方法可以测试,因为我偶尔会在进入“9999999”后退出while循环时发生崩溃
作为附注,我没有收到任何警告或错误消息只是来自eclipse的崩溃程序。
答案 0 :(得分:0)
C ++实现中并不普遍支持可变长度数组,尽管您的编译器明确支持它们。根据您的描述,问题在于以下代码:
int main() {
int Counter = 0;
float *UsrIn = nullptr;
float Array[Counter];
您正在定义一个大小为0的可变长度数组。因此,虽然您为UsrIn
分配了20个条目,但您没有为Array
分配任何内存。可变长度数组的目的是分配给定大小的数组,其中直到运行时才实际知道该大小。根据您的其他代码,这不是真正的情况。最简单的方法是将Array
大小更改为与UsrIn
大小匹配,例如:
float Array[20];
如果您真的想要更多动态行为,可以使用std::vector<float>
std::vector<float> Array;
...
Array.push_back(*UsrIn);