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

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

Восстановить пароль Регистрация
 
Zimos
1 / 1 / 0
Регистрация: 12.04.2014
Сообщений: 44
24.11.2014, 23:39     Ошибка при вызове функции добавления нового элемента в массив #1
Описывается класс Datchik. Затем в классе Lists объявляется массив объектов класса датчик и описывается функция NewDatchik добавления нового элемента(датчика) в этот массив. Программа вылетает при вызове этой функции из int _tmain. Подскажите пожалуйста, в чем ошибка?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class Datchik
{
    private:
        char *shifr = new char[4]; 
        char *data = (char*)malloc(sizeof(char*));
    public:
        Datchik(char* shifr1, char* data1) // конструктор класса
        {
            shifr =  shifr1;
            data = data1;
        }       
...
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class Lists
{
private:
    Datchik* spisokDatchikov; // объявление массива датчиков
    int nD = 0;
public:
    void NewDatchik(Datchik newD) // добавить новый датчик (новый элемент в массив)
    {
        spisokDatchikov[nD] = newD;
        nD++;
    }
...
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int _tmain(int argc, _TCHAR* argv[])
{
    Lists l;
            char *shifr = new char[4];
            char *data = (char*)malloc(sizeof(char*));
            cout << "Введите шифр датчика: ";
            cin >> shifr;
            cout << "Введите дату выпуска датчика: ";
            cin >> data;
            Datchik d(shifr, data);
            //-----------------------------
            l.NewDatchik(d); // при добавлении этой строки программа вылетает
        }
    }
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.11.2014, 23:39     Ошибка при вызове функции добавления нового элемента в массив
Посмотрите здесь:

Ошибка при вызове виртуальной функции в производном классе C++
C++ Ошибка при вызове функции
Ошибка компиляции при вызове виртуальной функции C++
Ошибка в вызове функции C++
C++ Реализовать приложение, содержащее функции добавления нового элемента в массив и удаления элемента из массива. (Имитируется “резиновый” массив)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
KOPOJI
Модератор
 Аватар для KOPOJI
16243 / 6454 / 390
Регистрация: 12.06.2012
Сообщений: 19,362
24.11.2014, 23:46     Ошибка при вызове функции добавления нового элемента в массив #2
Цитата Сообщение от Zimos Посмотреть сообщение
C
1
malloc(sizeof(char*))
и на сколько символов будет выделено памяти?
К чему эти разнообразия - new, а в следующей строчки аналогичное - но malloc?
Цитата Сообщение от Zimos Посмотреть сообщение
C++
1
2
3
Datchik* spisokDatchikov; // объявление массива датчиков
.......
spisokDatchikov[nD] = newD;
А память под этот самый spisokDatchikov[nD] выделять кто будет?
Кажется, вы не до конца освоились с выделением памяти, посмотрите подробнее.
З.Ы. вместо динамического массива, имхо, лучше подойдет вектор.
Zimos
1 / 1 / 0
Регистрация: 12.04.2014
Сообщений: 44
25.11.2014, 11:24  [ТС]     Ошибка при вызове функции добавления нового элемента в массив #3
Цитата Сообщение от KOPOJI Посмотреть сообщение
и на сколько символов будет выделено памяти?
К чему эти разнообразия - new, а в следующей строчки аналогичное - но malloc?
я знаю, что строка shifr будет состоять из 4 символов, но знаю какой размер будет у строки data.

Цитата Сообщение от KOPOJI Посмотреть сообщение
А память под этот самый spisokDatchikov[nD] выделять кто будет?
Подскажите как выделить, если не сложно (в с# я бы просто массиву ссылок типа класса присваивал объекты)
KOPOJI
Модератор
 Аватар для KOPOJI
16243 / 6454 / 390
Регистрация: 12.06.2012
Сообщений: 19,362
25.11.2014, 20:51     Ошибка при вызове функции добавления нового элемента в массив #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Zimos Посмотреть сообщение
но знаю какой размер будет у строки data.
подразумеваю, что тут "не знаю".. Иначе я не понимаю смысла выражения.
То, как вы написали malloc - памяти выделится только под один символ. Можете, конечно, поизгаляться со всякими scanf и им подобным.. Но, имхо, проще сделать в духе c++, раз уж в этом разделе.
Есть std::string, есть getline().
Цитата Сообщение от Zimos Посмотреть сообщение
в с# я бы просто массиву ссылок типа класса присваивал объекты
Ну-ну, покажите мне такое в шарпе) Шарп в этом плане точно "такой же".
Другое дело, если вы путаете это с коллекциями в шарпе. Тогда повторюсь, тоже самое есть и в плюсах
Цитата Сообщение от KOPOJI Посмотреть сообщение
З.Ы. вместо динамического массива, имхо, лучше подойдет вектор.
Собственно, обычного вектора вам тут за глаза.
C++
1
Datchik* spisokDatchikov;
Меняете на нечто подобное такому
C++
1
std::vector<Datchik> spisokDatchikov;
А это
C++
1
spisokDatchikov[nD] = newD;
Меняете на такое
C++
1
spisokDatchikov.push_back(newD);
Тогда переменная nd становится не нужна, количество датчиков вы всегда сможете узнать с помощью spisokDatchikov.size().
Не забудьте подключить файл <vector>
Zimos
1 / 1 / 0
Регистрация: 12.04.2014
Сообщений: 44
25.11.2014, 21:05  [ТС]     Ошибка при вызове функции добавления нового элемента в массив #5
Спасибо, разобрался.
Yandex
Объявления
25.11.2014, 21:05     Ошибка при вызове функции добавления нового элемента в массив
Ответ Создать тему
Опции темы

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