Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Zimos
1 / 1 / 0
Регистрация: 12.04.2014
Сообщений: 47
#1

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

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

Описывается класс 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)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.11.2014, 23:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка при вызове функции добавления нового элемента в массив (C++):

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

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

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

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

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

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

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

Цитата Сообщение от KOPOJI Посмотреть сообщение
А память под этот самый spisokDatchikov[nD] выделять кто будет?
Подскажите как выделить, если не сложно (в с# я бы просто массиву ссылок типа класса присваивал объекты)
0
KOPOJI
Эксперт HTML/CSSЭксперт PHP
16701 / 6623 / 433
Регистрация: 12.06.2012
Сообщений: 19,880
Завершенные тесты: 1
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>
1
Zimos
1 / 1 / 0
Регистрация: 12.04.2014
Сообщений: 47
25.11.2014, 21:05  [ТС] #5
Спасибо, разобрался.
0
25.11.2014, 21:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.11.2014, 21:05
Привет! Вот еще темы с ответами:

GCC ошибка при вызове функции - C++
Здравствуйте. Проблема в следующем: при вызове функции sub из тела add выдается ошибка. http://puu.sh/3bFZj.png Путем экспериментов...

Ошибка компиляции при вызове виртуальной функции - C++
Здравствуйте. Сильно не плюйтесь, в С я не силен. Пишу на джаве, но попал в руки код, в котором нужно разобраться. Не пойму в чем...

Ошибка при вызове виртуальной функции в производном классе - C++
Здравствуйте, извините, если подобная тема появлялась, но либо у меня руки не от туда растут, либо ее небыло... проблема в следующем:...

Ошибка при вызове функции transform с функцией, в качестве аргумента - C++
Здравствуйте! Хочу перевести строку в нижний\верхний регистр, используя готовые алгоритмы. Пишу так: transform(str1.begin(),...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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