開発環境
VC++6.0 MFC DLG
関数(例: C**Dlg::OnBotton**)内で,宣言できる配列の大きさに関する制約で,
どなたか,具体的なバイト数(容量)をご存知な方いらっしゃらないでしょうか.
私は,画像処理ソフトを作成しているのですが,
どうしても処理上関数内で一時的に大容量の配列を準備しなくては
ならないのですが,
頻繁にそれらが悪さをします.
例えば,大きな配列を宣言すると,その前の段階で宣言した配列の
一部のアドレスが新しい配列に奪い取られているのです.
http://www.microsoft.com/JAPAN/developer/library/vccore/_core_.2f.stack_linker.h
tm
を参照
ヒープを使ったほうがいいのでは
改行されてる・・・
>関数内で,宣言できる配列の大きさに関する制約で,
>具体的な容量をご存知な方いらっしゃらないでしょうか.
1[Mbyte]です。これはスタックサイズのデフォルト容量です。
詳細はMSDNでキーワード「スタック サイズの設定」を参照して下さい。
>例えば,大きな配列を宣言すると,その前の段階で宣言した配列の
>一部のアドレスが新しい配列に奪い取られているのです.
PC以外でもスタックオーバーフローでこういう事は起きます。
従って大量のメモリを使う時はヒープが最良かつ常套手段です。
vector< BYTE >等を使うと簡単です。
中級者X 様 くたくた様
貴重なアドバイスありがとうございました.
現時点では,メンバ関数として,利用することに
変更し,以下のような記述をしました.
public:
int** m_matrix_a;
void C画像処理Dlg::処理A{
m_matrix_a=intmatrix_new(5000,3);
**
**
*
*
***
**
intmatrix_del(m_matrix_a);
}
//行列の動的生成
IMatrix intmatrix_new(int row, int col){
int i;
IMatrix a=new int *[row+1];
forto(i,0,row)
a[i]=new int [col];
a[row]=0;
return a;
}
//行列の解放
void intmatrix_del(IMatrix a){
IMatrix b=a;
while(*b!=0)
delete [] *b++;
delete [] a;
}
なお,多次元配列の動的生成に関しては以下のHPを参考にさせていただきました
http://www.asahi-net.or.jp/~uc3k-ymd/
o(^-^)o