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

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

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

icq: 474284807
skype: masashama
Печаль Ошибка со стеком

Собственно код:
Код:
#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 в 16:54.
masashama вне форума   Ответить с цитированием
Старый 30.01.2011, 16:31   #2
Obey-Kun
Линуксоид
Профессионал
 
Аватар для Obey-Kun
 
Регистрация: 31.07.2009
Адрес: Москва
Сообщений: 1,403
Репутация: 165

icq: 323216
По умолчанию

У меня исходный код не компилировался. Поправил его в соответствие со стандартом, работает нормально:
Код:
#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, 16:34   #3
profi
ПрофессионалФорумчанин
 
Регистрация: 19.11.2007
Сообщений: 1,022
Репутация: 144
По умолчанию

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

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

icq: 474284807
skype: masashama
По умолчанию

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

icq: 323216
По умолчанию

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

icq: 474284807
skype: masashama
По умолчанию

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

icq: 323216
По умолчанию

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

icq: 474284807
skype: masashama
По умолчанию

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

icq: 323216
По умолчанию

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

icq: 474284807
skype: masashama
По умолчанию

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


15:05.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.