メモリ領域の確保の仕方
お世話になります。
メモリ領域の確保の仕方とポインタの動向についての質問です。
呼び出し側の関数testで領域Aを確保する。
関数test内で確保した領域に作業領域Bを加え作業をする。
関数testを抜けるときにreallocで呼び出し側から得た
サイズに領域Aを戻す。
このときの動作についてなんですが
//呼び出し側
void Main(){
DATA *data_p;//データ構造体
long datacount = 5;//データ数(5はテスト用の可変値
data_p = (DATA*)malloc(sizeof(DATA)*datacount);
test(data_p,datacount);
free((void*)(data_p);
}
//関数test
test(DATA data[],long datacount){
DATA *sagyodata_p;
long a = datacount+5;
sagyodata_p = data;
//作業用に領域を広げる
sagyodata_p = (DATA*)malloc(sizeof(DATA)*a);
//領域サイズを戻す
realloc(((void*)sagyodata_p),sizeof(DATA)*datacount);
}
としたときに
関数testでdata_pを参照したポインタsagyodata_pの中身は問題ないでしょうか?
現在の実行環境 .NET2003 C++では問題なく動いているようですが。
sagyodata_p = data;
sagyodata_p = (DATA*)malloc(sizeof(DATA)*a);
とするより、
realloc(((void*)data),sizeof(DATA)*a);
としたほうがよいのでしょうか?
この2つの違いがどのくらいあるのかお教えいただけたら
助かります。
よろしくお願いします。
お礼
なんか自分の理解が間違っていたようです。 ありがとうございました。