2013-12-05 7 views
0

Я получаю эту странную ошибку (программный сигнал SIGSEGV, ошибка сегментации ->, указывающий на строку кода ниже), когда я отлаживаю программу. Пожалуйста, действительно нужна ваша помощь в этом. Я пытаюсь установить некоторые условия «если», которые обрабатывают «отрицательные» значения инициализации в конструкторе, а также деструктор.Программный сигнал SIGSEGV, ошибка сегментации в выводе

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; 
} 
+0

Программа работает, когда «класс a» определяется самостоятельно ... но когда я добавляю «класс b» ... программа полностью строится без ошибок, но когда я запускаю ее ... программа сбой ... следовательно, i использовал отладчик n заметил эту странную ошибку ... –

ответ

1

all_2.array2[i] является NULL[i], потому что вы не инициализировать массив для отрицательных чисел.

Вы забыли инициализировать all_2.number2 до 0 в конструкторе для отрицательных входов.

+0

, но не пропустил бы это условие «если», так как «all_2.number2 меньше 0» ..? –

+0

Плохо, я изменил ответ, чтобы быть правильным сейчас. –

+0

owh ... получил это ... так много –

0

Проблема заключается в том, что yyou не инициализирует элемент данных number2, если первый аргумент конструктора отрицательный. Таким образом, число2 может содержать любое произвольное значение. Это и есть причина ущемления.

Смежные вопросы