Форум программистов, компьютерный форум CyberForum.ru

AccessViolationException - C++

Восстановить пароль Регистрация
 
Mukule
0 / 0 / 0
Регистрация: 08.11.2013
Сообщений: 8
08.11.2013, 00:40     AccessViolationException #1
Помогите пжл, не пойму, в чем проблема?

Выполняется без ошибки:
C++
1
2
3
4
5
6
7
int main()
{
  int i=7;
  int j=i;
  int *iref =&j;
return 0;
}
Выполняется с ошибкой AccessViolationException
C++
1
2
3
4
5
6
7
8
int main()
{
Student st1("Dima", 3, true);
    st1.Print();
    Student st2=st1;
    Student *stref=&st2;
return 0;
}
Остальной код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Student
{
public:
    char *name;
    int course;
    bool gender;
    Student();//конструктор без параметров
    Student(char *pname, int pcourse, bool pgender)//конструктор с параметрами
    {
        name=pname;
        course=pcourse;
        gender=pgender;
        cout<<"Parameterized constructer has operated"<<endl;
    };
    Student(const Student& ref)//конструктор копирования
    {
        strcpy(name, ref.name);
        course = ref.course;
        gender=ref.gender;
        cout<<"Copying constructer has operated"<<endl;
    };
    ~Student()
    {
        delete[] name;
        delete name,course;
        cout<<"Destructor has operated"<<endl;
    }
};
Причем в том случае, когда выполняется с ошибкой, строчка "Copying constructer has operated" не показывается, но, если убрать строчку
C++
1
Student *stref=&st2;
, то работает, в чем проблема, помогите плз?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Avazart
 Аватар для Avazart
6897 / 5137 / 252
Регистрация: 10.12.2010
Сообщений: 22,579
Записей в блоге: 17
08.11.2013, 00:50     AccessViolationException #2
C++
1
2
3
4
5
6
7
Student(char *pname, int pcourse, bool pgender)//конструктор с параметрами
    {
        name=pname;
        course=pcourse;
        gender=pgender;
        cout<<"Parameterized constructer has operated"<<endl;
    };
А память выделить под char* name ?
C++
1
name=pname;
Так нельзя делать в данном случае ... ты присваиваешь указатель а не копируешь данные.
Mukule
0 / 0 / 0
Регистрация: 08.11.2013
Сообщений: 8
08.11.2013, 01:05  [ТС]     AccessViolationException #3
strcpy(name, pname); так тоже не получается или этот метод не выделяет память?

Добавлено через 1 минуту
а нет, так сделал, теперь не работает(

Добавлено через 5 минут
Короче я так понял, что вся проблема в strcpy, а как еще по-другому выделить память?
C++
1
2
Student st2=st1;
cout<<&st1<<" "<<&st2;
и тут память тоже копируется, т.к. вывел разные участки.
Avazart
 Аватар для Avazart
6897 / 5137 / 252
Регистрация: 10.12.2010
Сообщений: 22,579
Записей в блоге: 17
08.11.2013, 01:09     AccessViolationException #4
C++
1
2
3
4
5
6
7
   Student(char *pname, int pcourse, bool pgender)//конструктор с параметрами
    {
        name= new char[strlen(pname)+1];
        strcpy(name, pcourse);
 
        // ....
    };
Добавлено через 1 минуту
C++
1
2
3
4
5
    ~Student()
    {
        delete[] name;
        delete name,course;
        cout<<"Destructor has operated"<<endl;
Вообще бредотина, берись за книги ...
Mukule
0 / 0 / 0
Регистрация: 08.11.2013
Сообщений: 8
08.11.2013, 01:27  [ТС]     AccessViolationException #5
уже исправил)
Yandex
Объявления
08.11.2013, 01:27     AccessViolationException
Ответ Создать тему
Опции темы

Текущее время: 15:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru