Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
 Аватар для Leeto
7 / 7 / 3
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1

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

02.06.2012, 21:29. Показов 2727. Ответов 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.06.2012, 21:29
Ответы с готовыми решениями:

Ошибка: Unhandled exception at 0x772115de in TimeShift.exe: 0xC0000005: Access violation reading location 0x00041000.
всем привет! При использовании двумерного массива постоянно появляется ошибка :Unhandled exception at 0x772115de in TimeShift.exe:...

Ошибка Unhandled exception at 0x001EB509 in Gauss1.exe: 0xC0000005: Access violation reading location 0xCCCCCCD4
Программа должна генерировать и выводить на экран матрицу n x n. Однако, вылетает исключение: Unhandled exception at 0x001EB509 in...

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

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

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

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

// test1 = MyLine1;

При этом если взять сделать такое присвоение p33 = p2; то все тоже ок работает
0
DU
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
02.06.2012, 22:08
когда все в одном файле - так проще тем, кто пытается вам помочь. копипастить код к себе в таком случае проще и шансы, что вам быстрее помогут да и что помогут вообще увеличиваются. по отдельности закидывать код бывает лениво.
1
 Аватар для Leeto
7 / 7 / 3
Регистрация: 23.12.2011
Сообщений: 372
Записей в блоге: 1
02.06.2012, 22:32  [ТС]
Цитата Сообщение от 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\1 exColonSynt_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
1500 / 1146 / 165
Регистрация: 05.12.2011
Сообщений: 2,279
02.06.2012, 22:35
я вам в самом начале написал чтобы вы смотрели на ворнинги сборки и чтобы проставили в каждом операторе в конце return *this;
вы сказали что все сделали. если этого не сделать то корраптится стек и вы получаете неопределенное поведение, т.е. краши в самых разных местах.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.06.2012, 22:35
Помогаю со студенческими работами здесь

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

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

Unhandled exception at . (KernelBase.dll) in . : 0xC0000005:
Здравствуйте. При использовании функции CharToOem, возникает ошибка Unhandled exception at 0x75B5F12A (KernelBase.dll) in...

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

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


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru