不确定我在哪里搞砸了。 刚刚学会了如何动态分配数组,现在我试图让用户分配一些整数并让程序找到输入数字的平均值。但是当用户要读入新分配的数组中的数字时,我就会出现分段错误。我出界了吗?或者我只是不恰当地对待指针?与你的答案一样苛刻或诚实,我真的只想知道我做错了什么。
这么多循环的原因是因为我不仅要在循环中断0,而且每当从函数返回NULL或输入负数时我也需要重复迭代。 / p>
提前非常感谢!!
#include <iostream>
using namespace std;
int* allocateArray(int);
int main()
{
int size;
int *ptr = NULL;
double sum = 0;
cout << "Enter Number of Integers. (Enter 0 to Exit)\n";
cin >> size;
while (size != 0)
{
do
{
do
{
while (size < 0)
{
cout << "Enter Number of Integers. (Enter 0 to Exit) \n";
cin >> size;
}
ptr = allocateArray(size);
}
while (ptr = NULL);
for (int i = 0; i < size; i++)
{
cout << "Enter Number for Integer " << i + 1 << endl;
cin >> ptr[i];
//THIS is where it stops. I get a segmentation fault no matter what number
//Or how many numbers I enter.
sum += *(ptr + i);
}
cout << "The Average is " << (sum/size) << endl;
delete [] ptr;
ptr = NULL;
sum = 0;
}
while (size != 0);
}
return 0;
}
//Function meant to practice allocating a dynamic array
int* allocateArray(int size)
{
int* tmp = NULL;
if (size < 1)
return NULL;
try
{
tmp = new int[size];
} catch(bad_alloc)
{
tmp = NULL;
}
if (tmp == NULL)
{
cout << "Failed to allocate the array!\n";
}
return tmp;
}
答案 0 :(得分:1)
将while (ptr = NULL);
替换为
while (ptr == NULL);
在比较和赋值运算符之间混淆是常见的初学者的错误。如果启用所有警告,您可能会收到警告。
这会将NULL
分配给ptr
,并评估为false
并中断。
答案 1 :(得分:0)
while (ptr = NULL);
for (int i = 0; i < size; i++)
{
cout << "Enter Number for Integer " << i + 1 << endl;
cin >> ptr[i];
//THIS is where it stops. I get a segmentation fault no matter what number
//Or how many numbers I enter.
sum += *(ptr + i);
}
你已经设定了#34; ptr&#34;在while循环中为NULL。