Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
XpertVision
17 / 17 / 3
Регистрация: 14.06.2012
Сообщений: 150
#1

Функция очистки экрана приводит к выборочному крешу программы - C++

16.06.2012, 00:57. Просмотров 438. Ответов 4
Метки нет (Все метки)

Вот программа :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include "classPat.h"
#include <fstream>
#include <stdlib.h>
 
int main ()
{
    setlocale (LC_ALL, "Russian");
    using std::cin;
    using std::cout;
    cout<<"Ââåäèòå ГўГ*ГёГҐ èìÿ : ";
    char ownerName[30];
    cin>>ownerName;
    cout<<"Ââåäèòå êîëè÷åñòâî æèâîòГ*ûõ êîòîðûå êîãäГ* ëèáî æèëè Гі ГўГ*Г± : ";
    int amountPats;
    cin>>amountPats;
    
    Pat *objPat=new Pat[amountPats];
    
    for (int i=1; i<=amountPats; i++)
    {
        cout<<"Ââåäè èìÿ "<<i<<"-ГЈГ® æèâîòГ*îãî : ";
        char patName[30];
        cin>>patName;
        objPat[i].SetName(patName);
        cout<<"Ââåäèòå âîçðГ*Г±ГІ "<<i<<"-ГЈГ® æèâîòГ*îãî : ";
        int patAge;
        cin>>patAge;
        objPat[i].SetAge(patAge);
    }
    system("cls");
    cout<<"\n-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/";
    cout<<"\nГ‚Г*ГёГҐ èìÿ : "<<ownerName<<"\n";
    cout<<"Êîëè÷åñòâî ГўГ*ГёГЁГµ ïèòîìöåâ : "<<amountPats<<"\n";
    cout<<"-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/-/";
    for (int i=1; i<=amountPats; i++)
    {
        cout<<"\nГ„Г*Г*Г*ûå "<<i<<"-ГЈГ® ïèòîìöГ* :\n";
        cout<<"Èìÿ : "<<objPat[i].GetName()<<"\n";
        cout<<"ÂîçðГ*Г±ГІ (ïîëГ*ûõ ëåò) : "<<objPat[i].GetAge()<<"\n";
        cout<<"----------------------------------------------";
    }
    cout<<"\n";
    char resp;
    cin>>resp;
    //delete [] objPat;
    return 0;
}
вот ее класс :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include <iostream>
 
class Pat
{
    private :
        int patAge;
        char patName[30];
    public :
        int GetAge () const;
        void SetAge (int age);
        const char *GetName () const;
        void SetName (char *name);
};
 
int Pat::GetAge () const
{
    return patAge;
}
 
void Pat::SetAge (int age)
{
    patAge=age;
}
 
const char *Pat::GetName () const
{
    return patName;
}
 
void Pat::SetName (char *name)
{
    for (int i=0; i<30; i++)
    {
        patName[i]=name[i];
    }
}
Если закоментировать строку 30 в программе, то она работает коректно. Но если оставить очистку экрана, то при создании 1, 3, 4, 5 объектов класа (строка 17), программа крешитса. При создании 2 работает коректно, но последнее значение выводитса на абум (вводишь 34, получаешь 2035824242), а вот если 6 или более то все в порядке. Если кто сталкивался с таким, объясните в чем причина такого абсолютно не адекватного поведения.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.06.2012, 00:57     Функция очистки экрана приводит к выборочному крешу программы
Посмотрите здесь:

Вставка ассемблерного кода в С++ для очистки экрана - C++
#include &quot;stdafx.h&quot; #include &lt;conio.h&gt; #include &quot;iostream&quot; #include &lt;fstream&gt; #include &quot;windows.h&quot; #include &lt;stdlib.h&gt; #include...

Счетчик в консольном приложении без очистки экрана - C++
Помогите создать счетчик в консольном приложении без system (&quot;cls&quot;). Нужно чтобы не очищался весь экран и отчет был с 03:00 до 00:00, с...

Как реализовать вставку ассемблерного кода в код с++ для очистки экрана? - C++
Как реализовать вставку ассемблерного кода в код с++ для очистки экрана (аналог system(&quot;cls&quot;), только в виде вставки _ass {}?? ps работаю в...

Функция, которая приводит строку к верхнему регистру - C++
Написать функцию, которая приводит строку к верхнему регистру. Проиллюстрировать работу функции примером

Вылетает функция очистки памяти двумерного динамического массива - C++
Я написал функции добавления и удаления столбцов и строчек двумерного динамического массива, создал меню, но когда сделаю несколько...

Функция для очистки памяти, выделенную под массив структур - C++
Как правильно очистить память в данном случае? Есть структура struct a { char *a1;//выделял память под строку char *a2; ...

Сокращение программы, приводит к другому результату. Лафоре 3 глава, 3 задача - C++
Добрый день. Столкнулся с непонятным свойством. При сокращении программы, выводится другой результат. Вот программа написанная мной,...

Какая функция отвечает за очистку экрана? - C++
собственно вопросы в 120 142 170 178 183 208 строках написаны какая функция отвечает за очистку экрана(только не clrscr из conio.h)? ...

Функция, рисующуя по границам экрана дисплея рамку из символов '*' - C++
Написать программу, имеющую в своем составе функцию, рисующую по границам экрана дисплея рамку из символов '*'.

Окно программы по центру экрана - C++
Может кто дать? Найти не могу. Без пред скомпилированных заголовков и прочей ерунды...

Функция (код программы) - C++
Если кому не лень - помогите с написанием программы. Надо взять предложение &quot;Вася, как оказалось, очень быстро бегает.&quot; и написать...

Не пойму алгоритм программы. Функция total - C++
Вот сижу, читаю, не пойму почему в этом примере #include &lt;conio&gt; #include &lt;iostream&gt; using namespace std; void total (int x);...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Andrey.K
342 / 263 / 15
Регистрация: 14.11.2010
Сообщений: 482
16.06.2012, 01:27     Функция очистки экрана приводит к выборочному крешу программы #2
Программа работать будет корректо, если ты исправишь в циклах этих:
C++
1
for (int i=1; i<=amountPats; i++)
на:
C++
1
for (int i=0; i<amountPats; i++)
Ты просто уходишь за границы массива, поэтому и мусор выдает и ошибки лупит.
Если будут проблемы сброшу свой проект, твой переделанный.
XpertVision
17 / 17 / 3
Регистрация: 14.06.2012
Сообщений: 150
16.06.2012, 01:33  [ТС]     Функция очистки экрана приводит к выборочному крешу программы #3
Абсолютно ничего не поменялось. Без system("cls"); все работает как часы, с ней..креши и мусор. (только при значении amountPats от 1 до 5). Я конечно понимаю что возможно не коректно работать с массивом не с нулевого элемента, а спервого, но тут это не обходимо, к тому же повторюсь, все работает как часы без функции system("cls").
Andrey.K
342 / 263 / 15
Регистрация: 14.11.2010
Сообщений: 482
16.06.2012, 01:40     Функция очистки экрана приводит к выборочному крешу программы #4
Не знаю , сделал проект и передал немного у меня работает и с ним и без.
Держи:
Вложения
Тип файла: rar Проверка - копия.rar (8.57 Мб, 4 просмотров)
XpertVision
17 / 17 / 3
Регистрация: 14.06.2012
Сообщений: 150
16.06.2012, 01:55  [ТС]     Функция очистки экрана приводит к выборочному крешу программы #5
Спасибо. Ваши изменения внес с вою код все работает нормально. Но если честно мой мозг до сих пор не понимает как функция очистки экрана могла вызывать все это, если как я понял, ошибка была в циклах for.
Yandex
Объявления
16.06.2012, 01:55     Функция очистки экрана приводит к выборочному крешу программы
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru