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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
#1

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

02.06.2012, 21:29. Просмотров 1178. Ответов 7
Метки нет (Все метки)

Значит есть линия (класс 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");
 
}
Заранее огромное спасибо !
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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 at 0x772115de in TimeShift.exe: 0xC0000005: Access violation reading location 0x00041000. - C++
всем привет! При использовании двумерного массива постоянно появляется ошибка :Unhandled exception at 0x772115de in TimeShift.exe:...

Unhandled exception at 0x0F73DF62 | 0xC0000005: Access violation writing location - C++
Многоуважаемые форумчане, необходима небольшая консультация по следующему коду: #include&lt;iostream&gt; #include&lt;fstream&gt; ...

Ошибка вида "Unhandled exception thrown: read access violation" - C++
Использую парсер tinyXML2. Программа собирается в режиме Debug. При запуске ее из студии - все работает. Но если запустить ее .exe файл из...

Exception thrown at 0x77D75BCA (ntdll.dll): 0xC0000005: Access violation reading location 0x0000 - C++
Есть задача Есть решение Основное приложение: #include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include...

Unhandled exception .. access violation - C++
Вот в этом коде выдает .. подозреваю что связано с вводом .. подскажите что не так #include &quot;stdafx.h&quot; #include &quot;iostream&quot; using...

Ошибка Unhandled Exception, Access Violation - C++
Странная проблема, на самом деле.. пишу следующее: #include &lt;fstream.h&gt; ... ofstream FileStream('data.txt');при выполнении пишет...

7
DU
1483 / 1129 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
02.06.2012, 21:42 #2
на ворнинги компиляции обращаете внимание?
в ваших операторах не во всех ветках исполнения есть return *this.
далее: для таких простых классов их не нужно переопределять. дефолтные варианты вполне себе подойдут.
классический operator = должен возвращать ссылку на самого себя, а не новый объект.
не испльзуйте using namespace std; (и любой другой, не только std) в h файлах.
1
Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
02.06.2012, 21:52  [ТС] #3
Цитата Сообщение от DU Посмотреть сообщение
на ворнинги компиляции обращаете внимание?
в ваших операторах не во всех ветках исполнения есть return *this.
далее: для таких простых классов их не нужно переопределять. дефолтные варианты вполне себе подойдут.
классический operator = должен возвращать ссылку на самого себя, а не новый объект.
не испльзуйте using namespace std; (и любой другой, не только std) в h файлах.
Ну, что то лучше не стало. "дефолтные варианты вполне себе подойдут."
извините, но дефолтный вариант мне не подойдет, там искомое задание немного сложнее и связанно именно с перегрузкой этого оператора.

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

В любом случае все что вы сказали я добавил компелятор все равно выдает ту же ошибку.
0
DU
1483 / 1129 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
02.06.2012, 21:55 #4
проблема не в компиляторе а в во время работы. вы добавили return в конце каждого оператора?
огранизуйте весь код в одном спп файле, чтобы его можно было легко себе скопипастить и проверить. и сюда выкладывайте.
1
Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
02.06.2012, 22:00  [ТС] #5
Цитата Сообщение от DU Посмотреть сообщение
проблема не в компиляторе а в во время работы. вы добавили return в конце каждого оператора?
огранизуйте весь код в одном спп файле, чтобы его можно было легко себе скопипастить и проверить. и сюда выкладывайте.
Если закоментить вот эту строчку то все ок работает... вы уверены что стоит все в один файл сводить ?

// test1 = MyLine1;

При этом если взять сделать такое присвоение p33 = p2; то все тоже ок работает
0
DU
1483 / 1129 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
02.06.2012, 22:08 #6
когда все в одном файле - так проще тем, кто пытается вам помочь. копипастить код к себе в таком случае проще и шансы, что вам быстрее помогут да и что помогут вообще увеличиваются. по отдельности закидывать код бывает лениво.
1
Leeto
7 / 7 / 0
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
02.06.2012, 22:32  [ТС] #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 ;
}

Спасибо !
0
DU
1483 / 1129 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
02.06.2012, 22:35 #8
я вам в самом начале написал чтобы вы смотрели на ворнинги сборки и чтобы проставили в каждом операторе в конце return *this;
вы сказали что все сделали. если этого не сделать то корраптится стек и вы получаете неопределенное поведение, т.е. краши в самых разных местах.
0
02.06.2012, 22:35
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.06.2012, 22:35
Привет! Вот еще темы с ответами:

exception : 0xC0000005: Access Violation - C++
Разработка идет по windows mobile 6. Возникла необходимость в определенном случае менять данные в памяти по адресу 0x02020000 cо смещение...

Ошибка "Unhandled exception, Access violation writing location" - C++
Пишу вот так: root-&gt;child1-&gt;parent=root; root-&gt;child2-&gt;parent=root;выходит ошибка Unhandled exception at 0x00073dec in Regul.exe:...

Необработанное исключение по адресу 0x4050D302 в ConsoleApplication17.exe: 0xC0000005: Access violation (параметры: 0x00000008) - C++
Добрый вечер. Я в сети нашел программу градиентному методу дробления шага и изменил в ней функцию на свою и градиенты на свои, но почему то...

Необработанное исключение в "0x54a2d2e9 (msvcr100d.dll)" в "3.exe": 0xC0000005: Нарушение прав доступа при записи "0xcccccccc". - C++
#include&lt;iostream&gt; #include&lt;conio.h&gt; #include&lt;string&gt; #include&lt;stdlib.h&gt; using namespace std; class Goods { char* name; ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru