char *dist = new char[10];
Это выделяет новый массив char
и устанавливает dist
для указания на него.
dist = values; // <-- Value is 4.5
Следующая строка немедленно заменяет указатель dist
на new
-Эд буфер, утечка этой памяти.Это теперь устанавливает dist
, чтобы указывать на некоторый другой буфер (предположительно), вместо этого.
meas.push_back(dist);
Это теперь добавляет указатель на объект values
в вектор.Поэтому каждая итерация цикла заканчивается добавлением указателя на тот же самый буфер values
в вектор, и это то, что вы видите в конце.
delete dist;
Это все еще указывает наvalues
.Исходя из контекста, маловероятно, что values
изначально был создан с new
, и даже если бы это было так, каждая итерация цикла заканчивалась бы delete
одним и тем же указателем.В любом случае, это неопределенное поведение, и при достаточном количестве циклов ваша программа, скорее всего, будет аварийно завершена.
Второй оператор if
повторяет все вышеперечисленные ошибки.
Поскольку ваше намерениепо-видимому, для написания кода на C ++ вам действительно нужно использовать библиотеку C ++, а именно отформатированные операторы вывода, и std::string
s, которые будут правильно распределять и управлять всей памятью для вас, устраняя такие общие логические ошибки.