2014年01月08日

連続した配列の動的生成とFile I/O

アドレスの連続した配列のメモリ確保に躓いたのでメモ.
Vectorでやってもいいんですが,それだとFile I/O系を全て変更しないといけないので.


//Grobal
double3 **u_rms;
float3 ***u_timeAnime;

//複数subroutineを無理に一つにまとめたので,動かないかも
subroutine()
{
u_rms= new double3* [size1];
u_rms[0]= new double3 [size1* size2];
for(i= 1; i < size1; i++){ //Pointerを代入? 多分,要素アクセスのアドレス的な何か
u_rms[i]= u_rms[0] + (i* size2);
}
size_array_2D_d3= sizeof(double3)* size1* size2; //もしかしたら,Paddingが…

u_timeAnime= new float3** [is_1000];
u_timeAnime[0]= new float3* [is_1000* size1];
u_timeAnime[0][0]= new float3 [is_1000* size1* size2];
for( i= 0; i < is_1000; i++) { //[i][j]のために,i=0
u_timeAnime[i]= u_timeAnime[0]+ (i* size1);
for(j= 0; j < size1; j++){
u_timeAnime[i][j]= u_timeAnime[0][0]+ ((i* size1* size2)+ (j* size2));
}
}
size_array_3D_Anime_f3= sizeof(float3)* is_1000* size1*size2;



ofstream fout("rms.bin", ios_base::binary);
//先頭アドレスを文字列に変換するため.u_rmsは,ポインタで宣言しているため,並列の先頭要素のアドレスを.sizeof(u_rms)だと,ポインタの大きさを返す.
fout.write( (char*)(&u_rms[0][0]), size_array_2D_d3 );
fout.close();

fout.open("timeAnime.bin", ios_base::binary);
fout.write( (char*)(&u_timeAnime[0][0][0]), size_array_3D_Anime_f3d );
fout.close();

delete[] u_rms[0];
delete[] u_rms;
delete[] u_timeAnime[0][0];
delete[] u_timeAnime[0];
delete[] u_timeAnime;
}

posted by にゃんこ at 13:54| Comment(0) | TrackBack(0) | C++
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/84834205
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック