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

Прекращена работа программы, неполадки с конструктором - C++

Восстановить пароль Регистрация
 
HUSTLIN
1 / 1 / 1
Регистрация: 19.10.2013
Сообщений: 75
07.01.2014, 15:54     Прекращена работа программы, неполадки с конструктором #1
При запуске выбывает "Прекращена работа программы".
Скорее всего проблемы с конструктором для
C++
1
 Note mas[8];
. Может намудрил с указателем на int.
Не могу разобраться, помогите пожалуйста)

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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#include "stdafx.h"
#include "iostream"
#include "stdio.h"
#include "string.h"
 
using namespace std;
 
int menu();
void vivod();
void vvod();
 
class Note
{
private:
    char imya[10];
    char fam[10];
    char tel[15];
    int date[3];
public:
    Note(){assign("\0", "\0", "\0", 0);}
    Note(char* im, char* f, char* t, int* d){assign(im, f, t, d);}
    void assign(char* im, char* f, char* t, int* d);
    /*Ф-ции возвращающие значения полей*/
    char* getIm(){return imya;}
    char* getFm(){return fam;}
    char* getTel(){return tel;}
    int* getDate(){return date;}
    /*Ф-ции устанавливающие значения полей*/
    void setIm(char* im){strcpy(imya, im);}
    void setFm(char* f){strcpy(fam, f);}
    void setTel(char* t){strcpy(tel, t);}
    void setDate(int* d)
    {
        for(int i = 0; i < 3; i++)
            date[i] = d[i];
    }   
};
 
void Note::assign(char *im, char *f, char* t, int *d)
{
    strcpy(imya, im);
    strcpy(fam, f);
    strcpy(tel, t);
    for(int i = 0; i < 3; i++)
        date[i] = d[i];
}
 
Note mas[8];
 
int _tmain(int argc, _TCHAR* argv[])
{
    for(;;)
    {
        switch(menu())
        {
        case 1 : vvod(); break;
        case 4 : exit(0);
        }
    }
    return 0;
}
 
int menu()
{
    int c;
    cout << "1. Vvod\n2. Vivod\n3. Vivod po familii\n 4. Exit()\n";
    cin >> c;
    return c;
}
 
void vvod()
{
    /*Ввод*/
    char im[10], f[10], t[15];
    int d[3], count, sort[10];
 
    cout << "Vvedite kolichestvo chelovek:  ";
    cin >> count;
 
    for(int i = 0; i < count; i++)
    {
        cout << "\n**********" ;
        cout << "Familiya:  ";
        cin >> f;
        cout << "Imya:      ";
        cin >> im;
        cout << "Telefon:   ";
        cin >> t;
        cout << "Date(dd.mm.gggg):      ";
        scanf_s("%d.%d.%d", &d[0], &d[1], &d[2]);
 
        mas[i].assign(im, f, t, d);
    }   
    
    for(int i = 0; i < count-1; i++)
        for(int j = i; j < count; j++)      
            if(mas[i].getTel() > mas[j].getTel())
                swap(mas[i], mas[j]);       
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.01.2014, 15:54     Прекращена работа программы, неполадки с конструктором
Посмотрите здесь:

C++ Прекращена работа программы
C++ Прекращена работа программы
Массив. Прекращена работа программы C++
Прекращена работа программы proj.exe C++
Прекращена работа программы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5943 / 5548 / 1783
Регистрация: 18.12.2011
Сообщений: 14,167
Завершенные тесты: 1
07.01.2014, 16:04     Прекращена работа программы, неполадки с конструктором #2
Конструктор по умолчанию.
C++
1
    Note(){int d[3]={0};assign("\0", "\0", "\0", d);}
TrueBit
 Аватар для TrueBit
95 / 95 / 12
Регистрация: 19.11.2012
Сообщений: 195
07.01.2014, 16:07     Прекращена работа программы, неполадки с конструктором #3
при создании объекта типа Note
C++
1
Note mas[8];
вызывается его конструктор
C++
1
Note() {assign("\0", "\0", "\0", 0);}
который вызывает функцию
C++
1
void assign(char* im, char* f, char* t, int* d);
и передает ей параметры, в т.ч. и указатель на 0 адрес памяти компьютера, в котором ничего нет(мусор)
и функция assign пытается записать в int date[3]; этот мусор с адреса 0x00000000
C++
1
date[i] = d[i];
как вариант можете в конструкторе создавать массив, заполнять как-нибудь, и передвать в assign
C++
1
2
3
4
5
6
7
        Note() {
            int * mas = new int[3];
            for (int i=0; i<3; i++)
                mas[i]=0;
            assign("\0", "\0", "\0", mas);
            delete [] mas;
        }
так не вылетает
HUSTLIN
1 / 1 / 1
Регистрация: 19.10.2013
Сообщений: 75
07.01.2014, 16:18  [ТС]     Прекращена работа программы, неполадки с конструктором #4
TrueBit,
а без динамической памяти как?
zss
Модератор
Эксперт С++
 Аватар для zss
5943 / 5548 / 1783
Регистрация: 18.12.2011
Сообщений: 14,167
Завершенные тесты: 1
07.01.2014, 16:19     Прекращена работа программы, неполадки с конструктором #5
Цитата Сообщение от HUSTLIN Посмотреть сообщение
а без динамической памяти как?
Я уже написал, как.
HUSTLIN
1 / 1 / 1
Регистрация: 19.10.2013
Сообщений: 75
07.01.2014, 16:20  [ТС]     Прекращена работа программы, неполадки с конструктором #6
Всем спасибо, все работает)
Yandex
Объявления
07.01.2014, 16:20     Прекращена работа программы, неполадки с конструктором
Ответ Создать тему
Опции темы

Текущее время: 23:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru