2013-08-25 4 views
2
class name { 
    char *s; 
    int len; 
public: 
    name(){    // Default constr. 
     s=NULL; 
     len =0; 
    } 
    //************************************************** 
    ~name(){   // Destruct. 
     if (s!=NULL){ 
      delete [] s; 
      s=NULL; 
     } 
    } 
    //************************************************* 
    name(const char * s1);  // Constr. 
    char* getName(); //fcn get name 
    int getLen() ;  // fcn get lenght 
    void setName(const char * s1); // fcn set name 
}; 
void name::setName(const char * s1){ 
    if (s!=NULL){ 
     delete [] s; 
      s=NULL; 
    } 
     len = strlen(s1)+1; 
     s=new char [len]; // back*** 
     strcpy(s,s1); 
} 
name::name(const char * s1){ 
    if (s!=NULL){ 
     delete [] s; 
      s=NULL; 
    } 
     len = strlen(s1)+1; 
     s=new char [len]; // back*** 
     strcpy(s,s1); 
} 
char* name::getName(){ 
    return s ; 
} 
int name::getLen(){ 
    return strlen(s)+1 ; 
} 
int main() 
{ 
    char C[20]; 
    cout << "Please enter a name: "; 
    cin >> C; 
    name AAA(C); 
    name BBB; 
    BBB.setName(C); 
    cout << "\nThe length of A(" << AAA.getName(); 
    cout << ") is: \a" << AAA.getLen() << endl << endl; 
    cout << "\nThe length of B(" << BBB.getName(); 
    cout << ") is: \a" << BBB.getLen() << endl << endl; 
    system("pause"); 
    return 0; 
} 

Когда я запускаю код, класс «BBB» выполняется успешно, но «AAA» дает мне ошибку выполнения!ошибки классов в конструкторе

ошибка:

Необработанное исключение в 0x651157aa (msvcr100d.dll) в test0.exe: 0xC0000005: Нарушение прав доступа чтения местоположение 0xccccccc0.

+1

Используйте 'std :: string'. Кстати, 'delete [] NULL;' is no-op. – chris

ответ

6

Здесь:

name::name(const char * s1){ 
    if (s!=NULL){ 

где плохое случается. s еще не инициализирован, и вы сравниваете его с NULL. Почему у вас создается впечатление, что изначально это NULL? Это неопределенное поведение. Просто остановите условие - это то, где объект построен, так что сделайте именно это - постройте его.

Обязательный совет на С ++ - используйте std::string.

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