C ++, оператор valgrind new (без знака int)

0

Например, я хочу моделировать что-то вроде цепочки автомобилей, и у каждого автомобиля есть указатель на следующий автомобиль. У меня есть класс Road-Class, определяющий один специальный полицейский автомобиль и некоторые функции-члены для поиска элемента (int), хранящегося в "el" -variable каждого автомобиля. А потом я хочу вставить автомобиль с определенным номером.

class Road
{
public:

    int size_road;
    Car* police;

public:

    bool insert(int el1);
    pair<bool,int> search(int el2);


};
struct Car {
public:
    int el;
 Car  ,  *right;
// Car(){}
  Car(int a1,, Car *c1): el(a1), right(c1){}

};

member_function:

bool Road::insert(int el1){

    if (size_road==0){      

    vector<Car*> cars;  
    Car* a;    

    for (int i=0; i<=size_road;i++){
        if (i==0){
             a =new Car(el1, NULL, NULL);
            cars.push_back(a);
        }
            else {
                Car* point=cars[i-1];
        a =new Car(el1, point, NULL);           
        cars.push_back(a)
            }       
    }

    size_road+=1;


    }

mail: Road road88; road.size_road = 0; road88.insert(5); Я запускаю valgrind, и это показало мне следующую ошибку:

==9188==    at 0x402B9B4: operator new(unsigned int) (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==9188==    by 0x8048AC1: Road::insert(int) (in /home/tonja/Desktop/HH/1/test)

Что это значит? Почему проблема связана с присвоением новому Car некоторого значения целочисленного типа?

Заранее спасибо.

  • 0
    0) valgrind иногда не очень подходит для C ++, у вас может быть ложный положительный результат 1) пожалуйста, опубликуйте реальный код или реальный тестовый пример. Код как есть даже не компилируется 2) почему не стандартный контейнер, такой как std::list ?
  • 0
    Вы только показываете нам трассировку стека, которая сообщается с ошибкой. В чем ошибка? Возможно, это утечка памяти, которая, вероятно, так как вы никогда не удаляете машины, которые создаете, с new ? В любом случае, используйте vector<Car> и не используйте new если вам это действительно не нужно (чего у вас нет).
Теги:
valgrind

1 ответ

1

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

  • 0
    Я отредактировал свой код, я хочу, чтобы Car-объекты существовали до конца программы.
  • 0
    Вы должны удалить их в какой-то момент. В противном случае valgrind будет продолжать сообщать об утечке памяти.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню