一些奇怪的异常抛出
Some weird exception throws
本文关键字:异常 更新时间:2023-10-16
奇怪的问题出现在我的程序中。它正在工作,但在调试中,它在输出的随机位置显示"抛出的异常">
cout<<"Average value:"<<u3.apr();
_getch();
有时,它甚至在主函数之后抛出此错误(在 {} 后面(这很烦人,因为由于这些错误,程序会在 3 秒后关闭。(也许是因为上课,但我正在努力学习它;)
已经尝试更改行顺序,重写类名和数组名。
#include <iostream>
#include <conio.h>
using namespace std;
class vid
{
private:
int i, j;
double rez, sum=0;
public:
int size;
double *arr = new double[size];
double apr()
{
for (i = 0; i < size; i++)
{
sum += (*(arr + i));
}
return sum / size;
}
};
int main()
{
vid u3;
cout << "Enter array length:";
cin >> u3.size;
for (int i = 0; i < u3.size; i++)
{
cout << "Enter array's " << i << " element:" << endl;
cin >> *(u3.arr+i);
}
cout << "Your array:" << endl;
for (int i = 0; i < u3.size; i++)
{
cout << *(u3.arr + i) << "t";
}
cout << endl;
cout<<"Average value:"<<u3.apr();
_getch();
}
感谢您的任何帮助;)
arr
在构造u3
时初始化。
但直到后来你才填充u3.size
。
因此,您的数组具有不确定的长度(已经是 UB(,并且您以后的访问可能无效。
你将不得不更聪明地管理你的班级成员!
此类类通常具有"调整大小"功能,该函数根据请求的大小执行分配。不要忘记安全地终止任何先前的分配,必要时移植数据。您可以在网上找到大量矢量实现的示例。
当然,重命名类并随机重新排序程序源代码的行不会解决任何问题。
u3.size直到u3被构造之后才会设置。 通过设置 u3.size,可以避免此编译器时错误。
似乎作为替代解决方案,您可能需要考虑如何摆脱new
调用以及编写将删除 arr 的析构函数的需求。
通过创建采用大小参数的构造函数并将 arr 切换到 std::vector,您可以允许类保存向量并处理内存分配和释放:
#include <iostream>
#include <vector>
using namespace std;
class vid
{
private:
int i, j;
double rez, sum=0;
public:
int size;
std::vector<double> arr;
// constructor requires size to be passed in;
// constructor initializes the arr array with the passed in size to zeroes.
vid(int argSize) : size(argSize), arr(argSize, 0.0){ }
double apr()
{
for (i = 0; i < size; i++)
{
sum += arr[i];
}
return sum / size;
}
};
int main()
{
uint size;
cout << "Enter array length:";
cin >> size;
vid u3(size);
for (int i = 0; i < u3.size; i++)
{
cout << "Enter array's #" << i << " element:" << endl;
cin >> u3.arr[i];
}
cout << "Your array:" << endl;
for (int i = 0; i < u3.size; i++)
{
cout << u3.arr[i] << "t";
}
cout << endl;
cout<<"Average value:"<<u3.apr();
char ch;
cin >> ch;
}
相关文章:
- 处理多个异常集合的C++方法
- 我在c++代码中生成了一个运行时#3异常
- 孤立代码块在结构中引发异常
- C++中的赋值发生,尽管右侧出现异常
- 从构造函数抛出异常时如何克服内存泄漏
- 异常属于C++中的线程还是进程
- 当类定义不可见时捕获异常
- 引发异常:读取访问冲突**dynamicArray**为0x1118235.发生
- 为什么异常不退出程序?
- 为什么我应该在异常处理中使用std::cerr而不是std::cout
- 如何修复链表类实现的未处理异常0xDDDDDDDD
- 关于:C++中异常对象的范围:为什么我没有得到副本?
- 是什么导致了Unity 3D中的"错误线程异常"?
- 如何将strftime中的格式错误作为异常捕获
- 创建具有 new in 函数和"this is nullptr"异常的对象
- 尝试使用智能指针时引发异常
- 函数如何通知用户它基于函数原型抛出异常?
- 是否值得降低我的代码的可读性,以便在出现内存不足错误时提供异常安全性?
- 当我使用 C++ 中的 C# dll 来使用 Selenium 时,存在异常处理问题
- Pytorch torch.cholesky忽略异常