Выбрать главу

«Лучший способ исправить ошибки в программе — пройти её пошагово. Приведённая ниже программа содержит несколько ошибок, которые надо найти и исправить. Эта программа имеется на прилагаемом компакт-диске в файле Concatenate1.срр

[Диск]

    /* Concatenate - конкатенация двух строк */ 

     /*                  со вставкой " - " между ними. В этой версии имеются ошибки. */

    #include <cstdio>

    #include <cstdlib>

    #include <iostream>

    #include <string.h>

    using namespace std ;

    void stringEmUp( char* szTarget ,

                                char* szSource1 ,

                                char* szSource2 ,

                                int nLength ) ;

    int main( int nNumberofArgs , char* pszArgs[ ] )

    {

            /* печать кириллицы, если Вы не установите программки gccrus.exe и g++rus.exe */

            setlocale (LC_ALL,".1251");

        cout << "Конкатенация двух строк со вставкой \" - \"\n"

                << "( В этой версии имеются ошибки. )" << endl ;

        char szStrBuffer[ 256 ] ;

        /* Создание двух строк одинаковой длины... */

        char szString1[ 16 ] ;

        strncpy( szString1 , "This is a string" , 16 ) ;

        char szString2[ 16 ] ;

        strncpy( szString2 , "THIS IS A STRING" , 16 ) ;

        /* ...и объединение их в одну */

        stringEmUp( szStrBuffer ,

                            szString1 ,

                            szString2 ,

                            16 ) ;

        // Вывод результата

        cout << "<" << szStrBuffer << ">" << endl ;

        /* Пауза для того, чтобы посмотреть на результат работы программы */

        system( "PAUSE" ) ; return 0 ;

    }

        void stringEmUp(char* szTarget,

                char* szSource1,

                char* szSource2,

                int nLength)

    {

        strcpy( szTarget , szSource1 ) ;

        strcat( szTarget , " - " ) ;

        strcat( szTarget , szSource2 ) ;

    }

_________________

135 стр. Глава 10. Отладка программ на С++

Соберите и запустите программу. Вместо объединения двух строк программа может вернуть всё, что угодно. Нам надо обратиться к отладчику, чтобы разобраться, что же в этой программе не так.

Пошаговое выполнение программы...136

Первое, что стоит сделать при поиске ошибки с помощью отладчика, — это выполнить программу в отладочном режиме. Попытка выполнить эту программу в отладочном режиме в Dev-C++ ( с помощью клавиши <F8> ) приводит к появлению диалогового окна с сообщением об ошибке "Ваша программа вызвала нарушение доступа". Этой информации слишком мало, чтобы разобраться, в чём проблема.

«Подобное сообщение об ошибке обычно говорит о некорректной работе с указателями того или иного типа.»

[Советы]

Команда Остановить выполнение заставляет отладчик заново начать работу с программой ( а не с того места, где вы находитесь ). Никогда не вредно перезагрузить отладчик перед началом работы.

Для того, чтобы увидеть, где именно таится проблема, выполните только часть программы. Отладчик позволяет сделать это посредством так называемых точек останова ( breakpoints ). Отладчик всякий раз прекращает выполнение программы при прохождении через точку останова, и передаёт управление программисту.

Установим точку останова на первой выполнимой инструкции, щёлкнув слева от строки вывода в cout или воспользовавшись клавишами <Ctrl+F5>, как сказано в табл. 10.1. При этом вы увидите появившийся маленький красный кружок, говорящий об установленной точке останова ( рис. 10.2 ).

Теперь продолжим выполнение программы под отладчиком, либо выбирая команду меню Debug => Debug ( Отладка => Отладка ), либо щелчком на соответствующей пиктограмме в панели отладки, либо при помощи клавиши <F8>. Выполнение программы немедленно прекращается на первой же строке, а подсветка строки из красной делается синей, указывая, что выполнение программы заморожено на данной строке.