Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
1 / 1 / 0
Регистрация: 12.04.2014
Сообщений: 61
1

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

24.11.2014, 23:39. Показов 1297. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Описывается класс 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); // при добавлении этой строки программа вылетает
        }
    }
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.11.2014, 23:39
Ответы с готовыми решениями:

Реализовать приложение, содержащее функции добавления нового элемента в массив и удаления элемента из массива. (Имитируется “резиновый” массив)
Реализовать приложение, содержащее функции добавления нового элемента в массив и удаления элемента...

Реализация добавления нового элемента в массив структур и удаление существующего
Как реализовать в этой программе добавление нового элемента и удаление существующего #include...

Не корректная работа цикла при вызове функции добавления пользователя
Всем Доброго времени суток. Такая проблема у меня есть класс в который мы вводим имя пользователя...

Ошибка при вызове функции
В функции NewWords вызывается функция correct,при отладке я не могу войти в эту функцию,к тому же...

4
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
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] выделять кто будет?
Кажется, вы не до конца освоились с выделением памяти, посмотрите подробнее.
З.Ы. вместо динамического массива, имхо, лучше подойдет вектор.
1
1 / 1 / 0
Регистрация: 12.04.2014
Сообщений: 61
25.11.2014, 11:24  [ТС] 3
Цитата Сообщение от KOPOJI Посмотреть сообщение
и на сколько символов будет выделено памяти?
К чему эти разнообразия - new, а в следующей строчки аналогичное - но malloc?
я знаю, что строка shifr будет состоять из 4 символов, но знаю какой размер будет у строки data.

Цитата Сообщение от KOPOJI Посмотреть сообщение
А память под этот самый spisokDatchikov[nD] выделять кто будет?
Подскажите как выделить, если не сложно (в с# я бы просто массиву ссылок типа класса присваивал объекты)
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
16844 / 6723 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
25.11.2014, 20:51 4
Лучший ответ Сообщение было отмечено Zimos как решение

Решение

Цитата Сообщение от 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>
1
1 / 1 / 0
Регистрация: 12.04.2014
Сообщений: 61
25.11.2014, 21:05  [ТС] 5
Спасибо, разобрался.
0
25.11.2014, 21:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.11.2014, 21:05
Помогаю со студенческими работами здесь

Ошибка при вызове функции
Ошибка в строке 90, при пошаговом выполнении она появляется при вызове функции, до захода в нее,...

Ошибка при вызове функции
Добрый день! Есть функция по расчету детерминанта int _det(int size,double **arr,double &amp;det) {...

Ошибка при вставке нового элемента
Одномерный массив, целые числа Вставить новый элемент между всеми парами элементов, имеющими...

GCC ошибка при вызове функции
Здравствуйте. Проблема в следующем: при вызове функции sub из тела add выдается ошибка....


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru