Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вокруг переменной повредился стэк! О горе, что же делать!? 
:(
    Опции темы
Bogdan1024
  Дата 26.10.2007, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1436
Регистрация: 28.9.2005
Где: Киев

Репутация: нет
Всего: 13



Есть программа, работает отлично, но когда она завершает работу, то выдаётся такой вот debug-error: "Runtime check failure: Stack around the variable 'buffer' was corrupted." Как исправить эту проблему?  Или хотя бы скрыть эрор smile ?
Код:
Код

#include <tchar.h>
#include <stdlib.h>
#include <conio.h>
#include <iostream>
#include <iomanip>
#include <string.h>
int _tmain(int argc, _TCHAR* argv[])
{
    const int n = 3;
    const int m = 30;
    char buffer[n][m];
    int Words[n]; //Сколько слов в строке?
    do
    {
        std::cout << "Input strings." << std::endl;
        int i = 0;
        while (i < n) 
        {
            const int BufferLength = 1000;
            char tmp[BufferLength];
            std::cout << "#" << i << ":";
            std::cin >> std::noskipws;
            std::cin.getline(tmp, BufferLength, '\n');
            std::cin.clear();
            tmp[m] = '\0';
            bool IsSpace = false;
            bool HasSpaceInside = false;
            //Теперь проверяем не противоречит ли данная строка условиям задачи.
            for (int j = 0; j < BufferLength && tmp[j] != '\0'; j++)                
            {
                if (tmp[j] == ' ') IsSpace = true;
                if (IsSpace && tmp[j] != ' ' && tmp[j] != '\0')
                {
                    HasSpaceInside = true;
                    break;
                }
            }
            if (HasSpaceInside)
            {
                i++;
                strcpy_s(buffer[i], tmp);            
            }
            else
                std::cout << "Bad string. Try again." << std::endl;
        }



        int MaxWordCount = -1;
        for (int i = 0; i < n; i++) //Считаем сколько слов в каждой строке
        {                            //Заодно вычисляем максимальное количество слов
            int WordCount = 0;
            bool IsLetter = false;//Это буква?
            for (int j = 0; j < m; j++)
            {
                char c = buffer[i][j];            
                if ((c >= 0x41 && c <= 0x5A) || (c >= 0x61 && c <= 0x7A))//Это буква!
                    IsLetter = true; 
                else //Это не буква.
                {
                    if (IsLetter) WordCount++;//Предыдущий символ был буквой, значит, мы только что прочитали слово.
                    IsLetter = false;
                    if (c == '\0') break; //Конец строки, закончим её обрабатывать!
                }            
            }
            Words[i] = WordCount;
            if (WordCount > MaxWordCount) MaxWordCount = WordCount;
        }
        std::cout << "Strings with the biggest quantity of words are:" << std::endl;
        for (int i = 0; i < n; i++)
            if (Words[i] == MaxWordCount)
                std::cout << "#" << i << ":" << buffer[i] << std::endl;
        std::cout << "More? ('y' - yes)" << std::endl;
    } while (_getch() == 'y');
    return 0;
}



--------------------
user posted image
PM MAIL   Вверх
Alek86
Дата 26.10.2007, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1299
Регистрация: 30.1.2007
Где: Киев

Репутация: 21
Всего: 25



Код

        int i = 0;
        while (i < n) 
        {
           ...
            if (HasSpaceInside)
            {
                i++;
                strcpy_s(buffer[i], tmp);            
            }


ты пишешь в i = 1, 2, 3, а не в 0, 1, 2, как хотел. рекомендую
Код

        int i = 0;
        while (i < n) 
        {
           ...
            if (HasSpaceInside)
            {
                strcpy_s(buffer[i++], tmp);            
            }



--------------------
user posted image    user posted image
PM MAIL   Вверх
Bogdan1024
Дата 26.10.2007, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1436
Регистрация: 28.9.2005
Где: Киев

Репутация: нет
Всего: 13



Таки да, Alex86, ты абсолютно прав! Спасибо огромное.  smile 
Когда я не вижу в чём ошибка у меня привычка винить богов и компилятор  smile 


--------------------
user posted image
PM MAIL   Вверх
JackYF
Дата 26.10.2007, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Bogdan1024, и пользуйся отладчиком - отличнейшая вещь.

Добавлено через 1 минуту и 36 секунд
Кстати, и пометь тему решённой.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0438 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.