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

Перегрузка assing operator. Unhandled exception at 0x103157aa (msvcr100d.dll) in 1exColonSynt_withColonSynt.exe: 0xC0000005: Access violation read - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Leeto
 Аватар для Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
02.06.2012, 21:29     Перегрузка assing operator. Unhandled exception at 0x103157aa (msvcr100d.dll) in 1exColonSynt_withColonSynt.exe: 0xC0000005: Access violation read #1
Значит есть линия (класс Line ) , которая состоит из точек (Class Point). Хочется Одной линии передать значения другой.
Я перегрузил assing operator для Point работает нормально. Для Класса Line выдает какую злую ошибку Unhandled exception at 0x103157aa (msvcr100d.dll) in 1exColonSynt_withColonSynt.exe: 0xC0000005: Access violation read...

Пожалуйста, посмотрите в чем косяк.
Код ниже.

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
29
30
31
32
33
34
35
36
37
38
//lines.h
#ifndef LINES_H
#define LINES_H
#include "pointer.h"
 
#include <iostream>
using namespace std;
 
class Line
{
     private:
      Point start; 
      string discrib;
      Point end;
 
   public:
      //constructors and destructor
      Line();
      Line(string x, Point P_start, Point P_end);
      ~Line();
        
      //getters and setters
      void SetStart (const Point SomePoint);
      void SetEnd (const Point SomePoint);
      Point GetStart() const;
      Point GetEnd() const;
 
      //other useful methods
      void Print() const;
      void CalculateLineEquation(Point SomePoint);
      double CalculateDistance (const Point SomePoint) const;
 
      Line operator = (const Line& l);
      friend ostream& operator << (ostream& os , const Line& l);
 
  
};
#endif
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
29
30
31
32
33
34
35
//pointer.h
#ifndef POINTER_H
#define POINTER_H
 
#include <iostream>
 
using namespace std; 
 
 
class Point
 
{
     private:
      double Xcoord;
      double Ycoord;
 
   public:
      Point();
      Point(const Point &OtherPoint);
      ~Point();
      void Print()const;
      void SetXCoordinate(const double Value);
      void SetYCoordinate(const double Value);
      double GetXCoordinate() const;
      double GetYCoordinate() const;
      void CalculateDistance(const Point OtherPoint) const;
 
      Point operator = (const Point& p);
      friend ostream& operator << (ostream& os , const Point& p);
 
  
 
};
 
#endif
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
//lines.cpp
#include <iostream>
#include <math.h>
#include "lines.h"
using namespace std;
#include <string>
 
 
Line::Line()
{
//  cout << "Privat, I'm line default constractor" << endl;
}
    
 
 
Line::Line(string x, Point P_start, Point P_end)
    :discrib(x), start(P_start), end(P_end)
 
{
 //  cout << "Gooten tak I'm line constructor" << endl;
}
 
 
 
Line::~Line()
{
    //cout << "salut I'm Line distructor. I'm killer " << endl; 
}
 
 
 
void Line::SetStart(const Point SomePoint)
{
   start = SomePoint;
}
 
 
void Line::SetEnd (const Point SomePoint)
{
  end = SomePoint;
}
 
 
 
Point Line::GetStart() const
{
   return start;
}
 
 
 
Point Line::GetEnd() const
{
   return end;
}
 
 
 
void Line::CalculateLineEquation(Point SomePoint) 
{
     start = GetStart();
     end = GetEnd();
     return start.CalculateDistance(end);
}
 
 
 
void Line::Print() const
{
   cout << "Figure it out!" << endl;
   
}
 
Line Line::operator = (const Line& l)
     {
    if (this == &l)
    {
        return * this; 
    }
 
    discrib = l.discrib;
    start = l.start;
    end = l.end;
    
    } 
 
ostream& operator << (ostream& os , const Line& l)
    {
        os << "[(" << l.discrib << "," << l.start << "," << l.end << ")]";
        return os ; 
    }
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
//Pointer.cpp
#include <iostream>
#include <math.h>
#include "pointer.h"
 
using namespace std;
 
 
 
Point::Point()
{
    //cout << "Hi, I'm default Point constructor" << endl; 
}
 
//Construct other points for calculating the points
 
Point::Point(const Point &OtherPoint)
 
{
    
//  cout << "\nHello, I'm Point constructor. " << endl;
    
 
   Xcoord = OtherPoint.Xcoord;
   Ycoord = OtherPoint.Ycoord;
}
 
 
 
//Destructor
 
Point::~Point()
{
    //cout << "\nHi, I'm Point distructor. " <<endl;
    //cout << "I'm already Kill PoDeCo and PoCo hahahahaha:))) "<< endl;
    
}
 
//Assign X-coordinate the Value that is put into the main
 
void Point::SetXCoordinate(const double Value)
{
    Xcoord = Value;
}
 
//Assing Y-coordinate the Value that is put into the main
 
void Point::SetYCoordinate(const double Value)
 
{
    Ycoord = Value;
}
 
//Return X-coordinate
 
double Point::GetXCoordinate() const
 
{
return Xcoord;
}
 
//Return Y-coordinate
 
double Point::GetYCoordinate() const
 
{
return Ycoord;
}
 
//Calculates distance between two points and outputs
 
void Point::CalculateDistance(const Point OtherPoint) const
 
{
double First = Xcoord;
double Second = OtherPoint.Xcoord;
double Third = Ycoord;
double Fourth = OtherPoint.Ycoord;
float Distance = sqrt((Second - First)*(Second-First) + (Fourth - Third)*(Fourth-Third));
cout << "The distance is: " << Distance << endl;
}
 
 
//Prints the points
 
void Point::Print() const
{
 cout << "Point is: (" << Xcoord << ", " << Ycoord << ")" << endl;
}
 
 
ostream& operator << (ostream& os , const Point& p)
    {
        os << "[" << p.GetXCoordinate() << "," << p.GetYCoordinate() << "]";
        return os ; 
    }
 
 
 
     Point Point::operator = (const Point& p)
     {
    if (this == &p)
        return * this; 
 
    Xcoord = p.Xcoord;
    Ycoord = p.Ycoord;
    }
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
//main.cpp
#include <iostream>
#include <math.h>
#include "pointer.h"
#include "lines.h"
 
using namespace std;
 
 
 
int main()
 
{
// Define two objects within Point class 
Point p1;
Point p2;
 
 
 
   //randomize four points
 
 
   //Set these points into different x and y values=
 
   p1.SetXCoordinate(14);
   p1.SetYCoordinate(15);
 
   p2.SetXCoordinate(16);
   p2.SetYCoordinate(17);
 
 
Line MyLine1("Pipec",p1,p2 );
 
 
  Point p33;
  Point p43;
 
  p33.SetXCoordinate(24);
  p33.SetYCoordinate(25);
  p43.SetXCoordinate(21);
  p43.SetYCoordinate(22);
  
  //p33 = p2;
 
  Line test1 ("hi",p33,p43 );
  
  test1 = MyLine1; 
  cout << MyLine1<<endl;
 
  cout << test1 ;
 
  cout << endl;
  system ("pause");
 
}
Заранее огромное спасибо !
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.06.2012, 21:29     Перегрузка assing operator. Unhandled exception at 0x103157aa (msvcr100d.dll) in 1exColonSynt_withColonSynt.exe: 0xC0000005: Access violation read
Посмотрите здесь:

C++ Unhandled exception .. access violation
C++ Ошибка: Unhandled exception ...(Kernel32.dll). вImgScan.ocx
Ошибка Unhandled Exception, Access Violation C++
Ошибка: Unhandled exception at 0x772115de in TimeShift.exe: 0xC0000005: Access violation reading location 0x00041000. C++
Необработанное исключение по адресу 0x4050D302 в ConsoleApplication17.exe: 0xC0000005: Access violation (параметры: 0x00000008) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
02.06.2012, 21:42     Перегрузка assing operator. Unhandled exception at 0x103157aa (msvcr100d.dll) in 1exColonSynt_withColonSynt.exe: 0xC0000005: Access violation read #2
на ворнинги компиляции обращаете внимание?
в ваших операторах не во всех ветках исполнения есть return *this.
далее: для таких простых классов их не нужно переопределять. дефолтные варианты вполне себе подойдут.
классический operator = должен возвращать ссылку на самого себя, а не новый объект.
не испльзуйте using namespace std; (и любой другой, не только std) в h файлах.
Leeto
 Аватар для Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
02.06.2012, 21:52  [ТС]     Перегрузка assing operator. Unhandled exception at 0x103157aa (msvcr100d.dll) in 1exColonSynt_withColonSynt.exe: 0xC0000005: Access violation read #3
Цитата Сообщение от DU Посмотреть сообщение
на ворнинги компиляции обращаете внимание?
в ваших операторах не во всех ветках исполнения есть return *this.
далее: для таких простых классов их не нужно переопределять. дефолтные варианты вполне себе подойдут.
классический operator = должен возвращать ссылку на самого себя, а не новый объект.
не испльзуйте using namespace std; (и любой другой, не только std) в h файлах.
Ну, что то лучше не стало. "дефолтные варианты вполне себе подойдут."
извините, но дефолтный вариант мне не подойдет, там искомое задание немного сложнее и связанно именно с перегрузкой этого оператора.

"классический operator = должен возвращать ссылку на самого себя, а не новый объект."
я абсолютно по той же схеме реализовал assignment оператор для Point класс работает нормально, связи с этим думаю, что не в этом деле извините.

В любом случае все что вы сказали я добавил компелятор все равно выдает ту же ошибку.
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
02.06.2012, 21:55     Перегрузка assing operator. Unhandled exception at 0x103157aa (msvcr100d.dll) in 1exColonSynt_withColonSynt.exe: 0xC0000005: Access violation read #4
проблема не в компиляторе а в во время работы. вы добавили return в конце каждого оператора?
огранизуйте весь код в одном спп файле, чтобы его можно было легко себе скопипастить и проверить. и сюда выкладывайте.
Leeto
 Аватар для Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
02.06.2012, 22:00  [ТС]     Перегрузка assing operator. Unhandled exception at 0x103157aa (msvcr100d.dll) in 1exColonSynt_withColonSynt.exe: 0xC0000005: Access violation read #5
Цитата Сообщение от DU Посмотреть сообщение
проблема не в компиляторе а в во время работы. вы добавили return в конце каждого оператора?
огранизуйте весь код в одном спп файле, чтобы его можно было легко себе скопипастить и проверить. и сюда выкладывайте.
Если закоментить вот эту строчку то все ок работает... вы уверены что стоит все в один файл сводить ?

// test1 = MyLine1;

При этом если взять сделать такое присвоение p33 = p2; то все тоже ок работает
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
02.06.2012, 22:08     Перегрузка assing operator. Unhandled exception at 0x103157aa (msvcr100d.dll) in 1exColonSynt_withColonSynt.exe: 0xC0000005: Access violation read #6
когда все в одном файле - так проще тем, кто пытается вам помочь. копипастить код к себе в таком случае проще и шансы, что вам быстрее помогут да и что помогут вообще увеличиваются. по отдельности закидывать код бывает лениво.
Leeto
 Аватар для Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
02.06.2012, 22:32  [ТС]     Перегрузка assing operator. Unhandled exception at 0x103157aa (msvcr100d.dll) in 1exColonSynt_withColonSynt.exe: 0xC0000005: Access violation read #7
Цитата Сообщение от DU Посмотреть сообщение
когда все в одном файле - так проще тем, кто пытается вам помочь. копипастить код к себе в таком случае проще и шансы, что вам быстрее помогут да и что помогут вообще увеличиваются. по отдельности закидывать код бывает лениво.
ок сейчас

Добавлено через 18 минут
Цитата Сообщение от Leeto Посмотреть сообщение
ок сейчас
Блин все проще на самом деле вот что мне говорит компелятор


1> main.cpp
1> lines.cpp
1> Generating Code...

1>c:\all my\с++\level 3\ha level 3\exercise 5 line class\lines.cpp(82): warning C4715: 'Line::operator=' : not all control paths return a value

1>c:\all my\с++\level 3\ha level 3\exercise 5 line class\pointer.cpp(108): warning C4715: 'Point::operator=' : not all control paths return a value

1> 1exColonSynt_withColonSynt.vcxproj -> C:\all my\с++\HA level 5\Solution\3.4_SimpleInheritance\Debug\1exColonSynt_withColonSynt.exe
========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========

lines.cpp(82):

Line Line::operator = (const Line& l)
{
if (this == &l)
return * this;

discrib = l.discrib;
start = l.start;
line 81: end = l.end;
line 82: }

pointer.cpp(108):
Point Point::operator = (const Point& p)
{
if (this == &p)
return * this;

Xcoord = p.Xcoord;
Ycoord = p.Ycoord;
line107:
line108: }

Как я должен переписать эти функции... или должны что они должны возвращать и почему class Point пропускает, а class Line не пропускает ?

Спасибо до меня дошло в чем дело
должно быть
Line Line::operator = (const Line& l)
{
if (this == &l)
{
return * this;
}
discrib = l.discrib;
start = l.start;
end = l.end;
return *this ;
}

Спасибо !
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.06.2012, 22:35     Перегрузка assing operator. Unhandled exception at 0x103157aa (msvcr100d.dll) in 1exColonSynt_withColonSynt.exe: 0xC0000005: Access violation read
Еще ссылки по теме:

C++ Ошибка "Unhandled exception, Access violation writing location"
Ошибка raised exception class EAccessViolation with message 'Access violation at address 004011FA C++
First chance exception at $77ADB09E. Exception class EAccessViolation with message 'Access Violation'. Process C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
02.06.2012, 22:35     Перегрузка assing operator. Unhandled exception at 0x103157aa (msvcr100d.dll) in 1exColonSynt_withColonSynt.exe: 0xC0000005: Access violation read #8
я вам в самом начале написал чтобы вы смотрели на ворнинги сборки и чтобы проставили в каждом операторе в конце return *this;
вы сказали что все сделали. если этого не сделать то корраптится стек и вы получаете неопределенное поведение, т.е. краши в самых разных местах.
Yandex
Объявления
02.06.2012, 22:35     Перегрузка assing operator. Unhandled exception at 0x103157aa (msvcr100d.dll) in 1exColonSynt_withColonSynt.exe: 0xC0000005: Access violation read
Ответ Создать тему
Опции темы

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