| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > double free of corruption |
| Автор: sergioK1 9.6.2016, 18:52 | ||
| последний раз такое делал лет 15назад как исправить ?
при выделении памяти в контсрукторе каждый раз начало памяти один и тот же адресс, тоесть по логике надо чтобы деструктор вызвался один раз с максимальной длиной, с другой стороны malloc может каждый раз дать разные адреса тоесть деструктор нудно вызывать каждый раз, в нете искал ничего толкового не нашел , |
| Автор: volatile 9.6.2016, 19:57 |
| Ваш объект в таком виде как сейчас, нельзя копировать. (а он копируется при помещении в вектор, и внутри вектора когда тот расширяется) Почему нельзя? Потому-что при удалении копии, происходит освобождение буфера delete[] buf; И новый объект, имеет указатель на память, которая уже удалена (освобождена) Предлагаю вам воспользоваться умным указателем, вместо char* buf; зы: а это вообще черте-что, зачем оно? Это не нужно |
| Автор: sergioK1 9.6.2016, 20:19 | ||
в теории знаю а как это написать практически ?, лет 5 к С++ не притрагивался, потом взято тут http://blog.smartbear.com/c-plus-plus/c11-tutorial-introducing-the-move-constructor-and-the-move-assignment-operator/ с помощью std:move такое решаеться ? каким образом? |
| Автор: volatile 9.6.2016, 21:12 |
можно и с move но с умными проще будет https://ideone.com/wTSxcA если я конечно правильно понял, что вы вообще пытались сделать |
| Автор: sergioK1 9.6.2016, 21:49 | ||
вот это что такое ? array_deleter<char>()) что передаеться в темплат? у меня в дебаге обьект пустой , |
| Автор: volatile 9.6.2016, 22:10 |
это чтобы умный указатель корректно массив удалил. по умолчанию он просто вызывал бы delete p; а здесь ему указывается чтобы он вызывал delete[] p; |