powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Что-то непонятное с копированием простого класса
5 сообщений из 5, страница 1 из 1
Что-то непонятное с копированием простого класса
    #38361319
tolyanchik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Решил попробовать, насколько быстр хвалёный std::move() ... но так и не дошёл до него.


Для начала создал примитивный класс-обёртку над динамическим массивом.
Реализовал копирование, начал тупо возвращать по значение - не тут то было.
Ошибка времени выполнения, пишет про коррумпированную кучу :)
Причём нестабильно так, фиг поймёшь.

Проверил на студии и codepad.org


Код: plaintext
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.
#include <iostream>
#include <ctime>

class ArrayWrapper {

public:

	static const int DEF_SIZE = 64;
	int* root;
	int size;

	ArrayWrapper(int s = DEF_SIZE){

		cout << "Ctor" << endl;
		root = new int[s];
		size = s;	
	}

	ArrayWrapper(const ArrayWrapper& other){
		
		cout << "Copy ctor" << endl;
		root = new int[other.size];
		size = other.size;

		for (int i = 0; i < size; i++){

			root[i] = other.root[i];
		}	
	}
	
	ArrayWrapper& operator=(const ArrayWrapper& other){

		cout << "Operator= " << endl;

		if (this == &other){

			return *this;
		}

		delete[] root;

		root = new int[other.size];

		for (int i = 0; i < other.size; i++){

			root[i] = other.root[i];
		}

		size = other.size;		
	}

	~ArrayWrapper(){

		cout << "Dtor" << endl;
		
		if (root != 0){

			delete[] root;			
		}
	}
};

ArrayWrapper getWrapper(int n){

	ArrayWrapper aw(n);

	for (int i = 0; i < n; i++){

		aw.root[n] = rand();
	}

	return aw;
}


int main(){

	srand(time(0));

	const int N = 16;
        int total = 0;

	cout << "N = " << N << endl;	

	for (int i = 0; i < N; i++){

		ArrayWrapper aw = getWrapper(N);

		for (int j = 0; j < N; j++){

			if (aw.root[j] == 666){

				total++;
			}
		}
	}

	cout << "Total = " << total << endl;

	return 0;
}
...
Рейтинг: 0 / 0
Что-то непонятное с копированием простого класса
    #38361429
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tolyanchik,

а у тебя только в приведенном здесь коде ArrayWrapper& operator=(const ArrayWrapper& other) ничего не возращает в случае неравенства указателей?
...
Рейтинг: 0 / 0
Что-то непонятное с копированием простого класса
    #38361478
tolyanchik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не дописал, но проблема кажись не в нём?
...
Рейтинг: 0 / 0
Что-то непонятное с копированием простого класса
    #38361485
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tolyanchik,

Ошибка здесь
Код: plaintext
1.
aw.root[n] = rand();


выход за границы массива из-за опечатки (n вместо i)
...
Рейтинг: 0 / 0
Что-то непонятное с копированием простого класса
    #38361486
tolyanchik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да что же за д.......м такой!

Действительно, глупость безгранична, спасибо всем!
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Что-то непонятное с копированием простого класса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]