程序接收信号SIGSEGV,输出分段故障
Program received signal SIGSEGV, Segmentation fault in output
我在调试程序时遇到了这个奇怪的错误(程序接收到信号SIGSEGV,Segmentation fault->,指向下面的代码行)。求你了,真的需要你的帮助。我试图设置一些"if"条件,以处理构造函数和析构函数中的"负"初始化值。
class a
{
public:
a(int _number1=0, float* _array1=NULL);
~a();
friend ostream& operator<<(ostream& output1, a& all_1);
private:
int number1;
float* array1;
};
class b
{
public:
b(int _number2=0, float* _array2=NULL);
~b();
friend ostream& operator<<(ostream& output2, b& all_2);
private:
int number2;
float* array2;
};
a::a(int _number1, float* _array1)
{
if(_number1>0)
{
number1 = _number1;
array1 = new float[number1];
memset(array1, 0, number1*sizeof(float));
}
else array1=_array1;
}
a::~a()
{
if(number1>0) delete[] array1;
}
ostream& operator<<(ostream& output1, a& all_1)
{
if(all_1.number1>0)
{
for(int i=0;i<all_1.number1;i++) output1<<all_1.array1[i]<<"n";
}
else output1<<"";
return(output1);
}
b::b(int _number2, float* _array2)
{
if(_number2>0)
{
number2 = _number2;
array2 = new float[number2];
memset(array2, 0, number2*sizeof(float));
}
else array2=_array2;
}
b::~b()
{
if(number2>0) delete[] array2;
}
ostream& operator<<(ostream& output2, b& all_2)
{
if(all_2.number2>0)
{
for(int i=0;i<all_2.number2;i++) output2<<all_2.array2[i]<<"n"; //This is where the error appeared.
}
else output2<<"";
return(output2);
}
int main()
{
a input1(-1);
b input_1(-1);
cout<<input1;
cout<<input_1;
}
all_2.array2[i]
是NULL[i]
,因为您没有为负数初始化数组。
您忘记在负输入的构造函数中将all_2.number2
初始化为0。
问题是,如果构造函数的第一个参数为负数,则yyou不会初始化数据成员number2。所以数字2可以包含任意值。这就是异常终止的原因。
相关文章:
- 分段故障(堆芯转储)矢量
- 递归函数计算序列中的平方和(并输出过程)
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 请解释"函数1(p1,p2,p3);"的输出
- 数组的指针从不分段故障
- C++:将控制台输出存储在宏中更好吗
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 在某些循环内使用vector.push_back时出现分段错误
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 输出字符时出现分段错误**
- vtkArrayCalculator语言 - 访问输出时出现分段错误
- 使用QSoundEffect时选择音频输出分段
- c++中的分段故障,无输出
- 输出出现分段故障
- 程序接收信号SIGSEGV,输出分段故障
- 分段错误:11(C++文件输入和输出、类和动态数组)
- 输出的第一部分是正确的,然后我得到了一个分段错误
- 写入输出文件时出现分段错误
- c++指针声明顺序输出分段错误或总线错误