Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

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

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 30.01.2011, 15:23   #1
masashama
Учусь слушать
Пользователь
 
Регистрация: 30.01.2011
Сообщений: 66
Печаль Ошибка со стеком

Собственно код:
Код:
#include "stdafx.h"
#include <iostream>  
#include <string.h> 
#include <stdio.h> 
#include <ctime>  

using namespace std;

const int maxi=10;  

void sortmass (int arr[], int kol_elem);   

void main()
{
	int mass[maxi];
	int index;

	srand(time(0));

   	 for(index=0; index<=maxi; index++)     
		mass[index] = rand()%100;

	     for(index=0; index<maxi; index++) 
		  cout<<mass[index]<<" ";
	        
	  sortmass(mass,maxi); 
	   cout<<"\n";

	getchar();
	return;
}

void sortmass (int arr[], int kol_elem) 
{
   int swap=1,i=1,k=1;
	for (i=1; i < kol_elem; i++)
	   for (k=0; (k < kol_elem-1); k++)
	     {
			 if (arr[i]<arr[k])
			   {
                                  swap = arr[k];
				  arr[k] = arr[i];
				  arr[i] = swap;
			   }
	   
	     }
	for (i=0; i<kol_elem; i++)
		cout<<arr[i]<<" ";
	cout<<"\n"; 
 }
Код работает правильно, но после завершения выдает ошибку Run-Time Check Failure #2 - Stack around the variable 'mass' was corrupted. Собственно помогите это исправить, компилятор visual studio 2010

Последний раз редактировалось Stilet; 30.01.2011 в 15:54.
masashama вне форума Ответить с цитированием
Старый 30.01.2011, 15:31   #2
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

У меня исходный код не компилировался. Поправил его в соответствие со стандартом, работает нормально:
Код:
#include <iostream>
#include <cstring>
#include <ctime>
#include <cstdlib>

using namespace std;

const int maxi = 10;

void sortmass(int arr[], int kol_elem);

int main()
{
    int mass[maxi];
    int index;
    
    srand(time(0));
    
    for(index = 0; index <= maxi; index++)
        mass[index] = rand() % 100;
        
    for(index = 0; index < maxi; index++)
        cout << mass[index] << " ";
        
    sortmass(mass, maxi);
    cout << "\n";
    
    cin.get();
}

void sortmass(int arr[], int kol_elem)
{
    int swap = 1, i = 1, k = 1;
    for(i = 1; i < kol_elem; i++)
        for(k = 0; (k < kol_elem - 1); k++) {
            if(arr[i] < arr[k]) {
                swap = arr[k];
                arr[k] = arr[i];
                arr[i] = swap;
            }
            
        }
    for(i = 0; i < kol_elem; i++)
        cout << arr[i] << " ";
    cout << "\n";
}
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 30.01.2011, 15:34   #3
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Та нет вроде никаких ошибок, кроме
Код:
void main()
, ну не пиши так никогда.
Правильно:
Код:
int main()
{
......
return 0;
}
. Выкинь visual studio 2010 и поставь себе CodeBlocks + MinGW.

Последний раз редактировалось profi; 30.01.2011 в 15:36.
profi вне форума Ответить с цитированием
Старый 30.01.2011, 15:50   #4
masashama
Учусь слушать
Пользователь
 
Регистрация: 30.01.2011
Сообщений: 66
По умолчанию

пасибо за помощь, я уже не раз удостоверяюсь что визула студио шляпа, со многим количеством багов
masashama вне форума Ответить с цитированием
Старый 30.01.2011, 15:54   #5
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Это не в визуал студии баги, а у вас код плохой. Не соответствующий стандартом. void main() не должно быть, main это всегда int. Но того факта, что лучше перейти на Code::Blocks и mingw, это не отменяет.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 30.01.2011, 18:03   #6
masashama
Учусь слушать
Пользователь
 
Регистрация: 30.01.2011
Сообщений: 66
По умолчанию

ХМ, но даже сейчас когда я сменил void на int, незабыл задать возвращаемое значение в виде нуля, то все равно выскакивает ошибка, код я считаю вполне юзабильный.
masashama вне форума Ответить с цитированием
Старый 30.01.2011, 18:07   #7
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Цитата:
незабыл задать возвращаемое значение в виде нуля,
это не обязательно по стандарту, хотя многими и считается хорошим тоном. ну так, к сведению.
Но ладно, а теперь по теме:
Код:
for(index = 0; index <= maxi; index++)
     mass[index] = rand() % 100;
Ошибку видите?
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 30.01.2011, 19:52   #8
masashama
Учусь слушать
Пользователь
 
Регистрация: 30.01.2011
Сообщений: 66
По умолчанию

Хм, поскольку си++ изучаю только два дня =), то могу предположить что массив начинаеться с 0 и заканчиваеться 9 если он из десяти элементов, если это так то нужно вместо <= поставить знак < , я прав?
masashama вне форума Ответить с цитированием
Старый 30.01.2011, 19:55   #9
Obey-Kun
Линуксоид
Участник клуба
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Сообщений: 1,403
По умолчанию

Да. В дальнешем лучше использовать std::vector и итераторы, ну а пока да.
И кстати, будет идеологически лучше, если index будет иметь тип size_t.
Я схожу с ума или это глючит реальность?
Jabber ID: obey@obey.su
Obey-Kun вне форума Ответить с цитированием
Старый 30.01.2011, 19:58   #10
masashama
Учусь слушать
Пользователь
 
Регистрация: 30.01.2011
Сообщений: 66
По умолчанию

Чтож, пасиба вам за помощь, маленька я стормазил!!! Можно темку закрывать!
masashama вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа со стеком,С++ Singularity Помощь студентам 0 04.05.2010 18:31
работа со стеком xarvenx Общие вопросы C/C++ 1 25.06.2009 12:31
Программа со стеком (С++) Olya90 Помощь студентам 14 29.04.2009 23:03
Задача со стеком host.pro Помощь студентам 1 12.03.2009 12:48
работа со стеком Katovski Помощь студентам 8 12.06.2008 10:30


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS
Здесь нужно купить рекламу за 7 тыс руб в месяц! )
пишите сюда - alarforum@yandex.ru
ИКС 840