Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Порчя стека


Автор: vid0k 14.5.2008, 00:49
Код

int _tmain(int argc, _TCHAR* argv[])
{    


    
    int k=0;
    int array[20];
    int col=20;
    
    while(k<col)
    {
        array[k]=rand()%100;
        k++;
    }
    int trash=0; 


    for (int i=0; i<=col ; i++)
    {
        for (int j=0; j<=col-i; j++) 
            {
            if (array [j]>array [j+1]) 
            {

                trash=array[j]; 
                array [j]=array [j+1];
                array [j+1]=trash;
                }
        }
    }
    k=0;
    while(k<col){
    cout<<array[k]<<endl;
    k++;
    }

    
}

не пойму почему ругается
Run-Time Check Failure #2 - Stack around the variable 'array' was corrupted.
в борланде все норм а встудии такая фигня

Автор: creatorcode 14.5.2008, 01:02
Код

for (int i=0; i<=col ; i++)
    {
        for (int j=0; j<=col-i; j++)

Из-за того, что неравенства не строгие, ты портишь область памяти, не принадлежащую array. 

Автор: vid0k 14.5.2008, 01:11
щас попробовал со строггими все равно вылетает

Автор: creatorcode 14.5.2008, 01:15
Надо еще вычесть 1 из col во втором цикле.
 
Код

 for (int i=0; i<=col ; i++)
    {
        for (int j=0; j<col-i-1; j++)

Это работает. smile 

Автор: vid0k 14.5.2008, 01:21
Код

for (int i=1; i<col ; i++)
    {
        for (int j=1; j<col-i; j++)

у мяня заработал вот такой код но здесь проверка идет не снулевого елемента те с первого
а c array[1]

Автор: creatorcode 14.5.2008, 01:25
Это пузырьковая сортировка?
Я когда-то реализовывал её так:
Код

 for (int i=col-1; i>0 ; i--)
    {
        for (int j=0; j<i; j++) 
            {
            if (array [j]>array [j+1]) 
            {
                trash=array[j]; 
                array [j]=array [j+1];
                array [j+1]=trash;
                }
        }
    }

Автор: vid0k 14.5.2008, 01:30
спасибо за ответ

Добавлено через 4 минуты и 53 секунды
и еще вопрос я создаю объект класса CTime (MFC)
замеряю время в милисекундах с помощью GetTickCount();
время начала и время конца но не могу получить разницу пишет
 error C2679: binary '=' : no operator found which takes a right-hand operand of type 'ATL::CTimeSpan' (or there is no acceptable conversion)

Автор: MAKCim 14.5.2008, 11:42
vid0k, 
учи английский
все написано

Автор: Annihilator 14.5.2008, 21:54
Цитата(vid0k @  14.5.2008,  05:30 Найти цитируемый пост)
и еще вопрос я создаю объект класса CTime (MFC)
замеряю время в милисекундах с помощью GetTickCount();
время начала и время конца но не могу получить разницу пишет
 error C2679: binary '=' : no operator found which takes a right-hand operand of type 'ATL::CTimeSpan' (or there is no acceptable conversion) 

код хотя бы приведи

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)