LINUX.ORG.RU

Совсем с поинтерами запутался.


0

0



Помогите, пожалуйста:
имеется такая функция:
double * vector2array (const std::vector<double>& v){
double * arr;
arr=new double [v.size()];
for(int i=0;i<v.size();++i) arr[i]=v[i];
return arr;
}

В другой функции делается вот это:

void f(const std::vector<double>& v){
double * myArray=vector2array(v);
//-делаем что-то полезное с myArray
delete myArray; // - на месте ли это?
cout<<"end of f(...)"<<endl;
}

вопрос в том, правильно ли я освобождаю память?

ПС: это не дом. задание, я просто уже пару лет не занимался такого типа весчами

Спасибо

anonymous

А "делаем что-то полезное с myArray" подразумевает его модификацию?

Если ответ отрицательный, то вместо копирования массива стоит просто использовать адрес нулевого элемента вектора. Стандартом гарантируется. Если утвердительный, то копировать можно было бы как-нибудь поизящнее.

anonymous
()
Ответ на: комментарий от anonymous

Путь практически самоубийственный. При работе с myArray в таком случае ты должен гаранитровать 2 вещи:

1. что содерживое myArray нигде не модифицируется. 2. что v нигде на протяжении использования myArray также не модифицируется.

В реальной программе такое гарантировать как правило трудно.

BottleHunter
()

про delete [] уже сказали. а зачем ты делаешь vector2array ? std::vector внутри устроен как массив и можно передавать адрес первого элемента как адрес первого элемента массива

Reset ★★★★★
()
Ответ на: комментарий от Reset

>а зачем ты делаешь vector2array ?

для того, что-бы передавать содержание std::vector-а функциям, которые принимают double*. Что-то по типу std::string::c_str().

>Путь практически самоубийственный. При работе с myArray
>в таком случае ты должен гаранитровать 2 вещи ...

что вы предложите? Только ни от C arrays, ни от STL vectors избавится не могу: первые достались по наследству от оригинальных авторов программы, с которой работаю, а вторые используются согласно "политики партии"

anonymous
()
Ответ на: комментарий от anonymous

>для того, что-бы передавать содержание std::vector-а функциям, которые принимают double*. Что-то по типу std::string::c_str().


vector < double > vec;
vec.resize(100);

...

fread(&vec[0], 100, sizeof(double), f);
....


ну и т.п. везде где стоит double * передаешь &vec[0]

Reset ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.