Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.05.2012, 19:09   #1
Стремящийся
Форумчанин
 
Аватар для Стремящийся
 
Регистрация: 01.11.2011
Сообщений: 172
По умолчанию

Всем привет!

Тренируюсь над перегрузкой операций в классах. Все работает, однако если main объявлен как void, ошибки нет, когда int вылетает ошибка.
Ставлю точку останова, показывает что срабатывании return происходит ошибка.
Посмотрите, пжлста.

Код:
int main()
{
	setlocale (LC_ALL, "rus");
	cout << "Введите размерность первого двумерного массива\n";
	int a, b, c, d, f, g;
	cin >> a >> b;
	
	DoubleSubsriptedArray integer( a, b );

	cout << "Введите элементы первого массива\n";
	cin >> integer;
	
	cout << "Первый двумерный массив\n" <<  integer << endl ;
	
		DoubleSubsriptedArray integer3(integer);
		cout << "300" << integer3;
	/*system("pause");*/
	return 1;
Заранее благодарен.

Текст ошибки.
Windows has triggered a breakpoint in Sun.exe.

This may be due to a corruption of the heap, which indicates a bug in Sun.exe or any of the DLLs it has loaded.

This may also be due to the user pressing F12 while Sun.exe has focus.

The output window may have more diagnostic information.
Желание тысяча возможностей, нежелание - тысяча причин

Последний раз редактировалось Stilet; 02.05.2012 в 19:33.
Стремящийся вне форума Ответить с цитированием
Старый 02.05.2012, 19:35   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
corruption of the heap
Вот причина. Выход за пределы памяти или ты залез в чужую область памяти.
Цитата:
DoubleSubsriptedArray
Это класс? Так может стоит его объекты через new создавать?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.05.2012, 19:38   #3
Стремящийся
Форумчанин
 
Аватар для Стремящийся
 
Регистрация: 01.11.2011
Сообщений: 172
По умолчанию

Спасибо, но почему при void все нормально?
Желание тысяча возможностей, нежелание - тысяча причин
Стремящийся вне форума Ответить с цитированием
Старый 02.05.2012, 19:42   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я механики Сишной не знаю, но думаю что return <значение> оставляет свой ответ в стеке, который ты повредил своими локальными переменными. void же ничего в стек не пишет (для ответа той проге что запустила твою), поэтому не затирает важную информацию, оставленную в этом месте стека прогой-загрузчиком (например это адресс возврата)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.05.2012, 20:05   #5
Стремящийся
Форумчанин
 
Аватар для Стремящийся
 
Регистрация: 01.11.2011
Сообщений: 172
По умолчанию

Странно, закомментировал конструктор копии, все нормально.
Конструктор копии:
Код:
DoubleSubsriptedArray::DoubleSubsriptedArray( const DoubleSubsriptedArray& copy ) :// конструктор копии
rows(copy.rows), cols(copy.cols)
{
	ptr=new int(rows*cols);

	for ( int i = 0; i < rows*cols; ++i )
	{
		ptr[ i ]=copy.ptr[ i ];
	}
}
From Stilet: Какого пса?? Ты что правил не читаешь? Код оформляется не абы как а спецтегом по кнопке #. Если в следующий раз не выполнишь эти требования - забаню за нарушения!!
Сверяюсь с книгой, где аналогичный пример, все нормально, странно...
Желание тысяча возможностей, нежелание - тысяча причин

Последний раз редактировалось Stilet; 02.05.2012 в 20:42.
Стремящийся вне форума Ответить с цитированием
Старый 02.05.2012, 23:32   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,830
По умолчанию

Код:
ptr=new int[rows*cols];
p51x вне форума Ответить с цитированием
Старый 08.05.2012, 10:37   #7
rmv240899
Форумчанин
 
Регистрация: 18.02.2012
Сообщений: 155
По умолчанию

При успешной отработке программы main должна возвращать 0. Если функция main ничего не возвращает, то если все отработало, система все равно получит 0. Если вы пишете int main(), то нужно явно задать ей возврат нулевого значения.
rmv240899 вне форума Ответить с цитированием
Старый 08.05.2012, 10:43   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,830
По умолчанию

Цитата:
Если вы пишете int main(), то нужно явно задать ей возврат нулевого значения.
Необязательно, по стандарту, если не указано иное в конце мейн вернет 0. Т.е. компилятор вставит сам.
p51x вне форума Ответить с цитированием
Старый 08.05.2012, 10:52   #9
rmv240899
Форумчанин
 
Регистрация: 18.02.2012
Сообщений: 155
По умолчанию

Я говорю, что void будет работать, но при int нужно писать return 0.
rmv240899 вне форума Ответить с цитированием
Старый 08.05.2012, 10:58   #10
Blade
Software Engineer
Участник клуба
 
Аватар для Blade
 
Регистрация: 07.04.2007
Сообщений: 1,618
По умолчанию

Цитата:
Сообщение от rmv240899 Посмотреть сообщение
Я говорю, что void будет работать
Не будет

Цитата:
Сообщение от rmv240899 Посмотреть сообщение
но при int нужно писать return 0.
Не нужно
Мужество есть лишь у тех, кто ощутил сердцем страх, кто смотрит в пропасть, но смотрит с гордостью в глазах. (с) Ария
Blade вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка в qt: [debug/main.o] Error 1 Etete Qt и кроссплатформенное программирование С/С++ 1 11.04.2012 21:36
Ошибка : expression syntax in function main 7ple Общие вопросы C/C++ 12 09.10.2011 16:36
Ошибка`main' must return `int' Hichigo Общие вопросы C/C++ 9 26.02.2011 15:33
Exception in thread "main" java.lang.NullPointerException at Main.main(Main.java:9) elpilasgsm Помощь студентам 4 18.01.2011 08:23
Ошибка Could not find the main class own Общие вопросы по Java, Java SE, Kotlin 0 12.01.2011 10:00