私は現在、動的に割り当てられた独自の基本的なベクター構造体を作成する割り当てに取り組んでいます。作成する関数の 1 つは、ユーザーが値を入力したときにベクトルを拡張する関数です。
struct Vector{//vector structure
unsigned int size;
Elem *svector;
};
Vector *extend_vec(Vector *extend,Elem element){
if (extend==NULL){
return NULL;}
Elem *tempVec=new Elem[(*extend).size];
memcpy(tempVec,(*extend).svector,sizeof((*extend).svector));//copies memory from the original array to the temp array
(*extend).size+=1;
delete[] (*extend).svector;//clears the memory
(*extend).svector=new Elem[(*extend).size];//reallocates with the new size
}
Elem=float ところで**
私の質問は、この行が必要かどうか、そしてその理由です:
delete[] (*extend).svector;//clears the memory
このような状況でメモリがどのように上書き/再割り当てされるかについて、私は少しぼんやりしています。再割り当てが既存のものを上書きするかどうかはわかりません。
**だから私はみんなのコメントを読んで、これが私が思いついたものです.
Vector *extend_vec(Vector *extend,Elem element){
if (extend==NULL){
return NULL;}
Elem *tempVec=new Elem[extend->size+1];
tempVec[extend->size+1]=element;
memcpy(tempVec,extend->svector,(extend->size*sizeof(Elem)));//copies the memory from the original array to the rest of the temp array
extend->size+=1;
delete[] extend->svector;//clears the memory
extend->svector=tempVec;//the original vector now becomes the extended vector
delete[] tempVec;//clears the temporary memory
return extend;
}