関数内で宣言できる配列の総量

[戻る]
merlo 2002/05/10(金) 22:53:18
開発環境
 VC++6.0 MFC DLG

関数(例: C**Dlg::OnBotton**)内で,宣言できる配列の大きさに関する制約で,
どなたか,具体的なバイト数(容量)をご存知な方いらっしゃらないでしょうか.

私は,画像処理ソフトを作成しているのですが,
どうしても処理上関数内で一時的に大容量の配列を準備しなくては
ならないのですが,
頻繁にそれらが悪さをします.
例えば,大きな配列を宣言すると,その前の段階で宣言した配列の
一部のアドレスが新しい配列に奪い取られているのです.

中級者X 2002/05/11(土) 00:55:09
http://www.microsoft.com/JAPAN/developer/library/vccore/_core_.2f.stack_linker.h
tm
を参照
ヒープを使ったほうがいいのでは

中級者X 2002/05/11(土) 00:55:44
改行されてる・・・

くたくた 2002/05/11(土) 15:01:34
>関数内で,宣言できる配列の大きさに関する制約で,
>具体的な容量をご存知な方いらっしゃらないでしょうか.
1[Mbyte]です。これはスタックサイズのデフォルト容量です。
詳細はMSDNでキーワード「スタック サイズの設定」を参照して下さい。

>例えば,大きな配列を宣言すると,その前の段階で宣言した配列の
>一部のアドレスが新しい配列に奪い取られているのです.
PC以外でもスタックオーバーフローでこういう事は起きます。
従って大量のメモリを使う時はヒープが最良かつ常套手段です。
vector< BYTE >等を使うと簡単です。

merlo 2002/05/11(土) 20:29:09
中級者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/

merlo 2002/05/11(土) 20:29:37
[[解決]]
o(^-^)o

古いスレッドには追加発言できません。