vector <int *>. push_back () перезаписывает значения, на которые указывает front ()

0

Код находится на pastebin: http://pastebin.com/UknqKvMq

Таким образом, я переставляю все возможные схемы 0,1,2,3,4,5,6,7,8,9 (т.е. Формируя 10-значные числа). Я сохраняю каждую компоновку в куче, вызывая

new int[10]

возвращаемый указатель я нажимаю на

static vector<int*>

Теперь, когда я нажимаю указатель на вектор, данные, на которые указывает первый элемент, изменяются (и, возможно, все остальные объекты, на которые указывает вектор). У меня есть ряд операторов печати в коде, показывающем это, при вызове sleep() для замедления процесса. Почему это происходит?

Теги:
stdvector
heap
overwrite

2 ответа

1
Лучший ответ

Вы вызываете Permute, который Permute расположение указателя inputCopy->arrangement в ваш статический вектор. Затем сразу же удалите его. Это означает, что ваш вектор содержит оборванные указатели.

  • 0
    Спасибо! Кто-то еще указал на это. Глупая ошибка, я скопировал код перестановки и немного изменил его (он использовался для копирования массива размещения).
1

Я не знаю, что вы пытаетесь сделать здесь, но вы можете написать это в нескольких строках кода:

Использование std::next_permutation

std::vector<int> v{0,1,2,3,4,5,6,7,8,9};
// std::sort(v.begin(), v.end());
do {

    for(const auto&i:v)
      std::cout<<i;
    std::cout<<std::endl;

} while(std::next_permutation(v.begin(), v.end()));
  • 0
    нужна ли сортировка в начале?
  • 0
    @PreetKukreti noop, только что прокомментировал
Показать ещё 3 комментария

Ещё вопросы

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