関数内で宣言できる配列の総量 – プログラミング – Home

関数内で宣言できる配列の総量
 
通知
すべてクリア

[解決済] 関数内で宣言できる配列の総量


merlo
 merlo
(@merlo)
ゲスト
結合: 23年前
投稿: 85
Topic starter  

開発環境
VC++6.0 MFC DLG

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

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


引用未解決
トピックタグ
中級者X
 中級者X
(@中級者X)
ゲスト
結合: 23年前
投稿: 26
 

http://www.microsoft.com/JAPAN/developer/library/vccore/_core_.2f.stack_linker.h
tm
を参照
ヒープを使ったほうがいいのでは


返信引用
中級者X
 中級者X
(@中級者X)
ゲスト
結合: 23年前
投稿: 26
 

改行されてる・・・


返信引用
くたくた
 くたくた
(@くたくた)
ゲスト
結合: 23年前
投稿: 119
 

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

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


返信引用
merlo
 merlo
(@merlo)
ゲスト
結合: 23年前
投稿: 85
Topic starter  

中級者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
 merlo
(@merlo)
ゲスト
結合: 23年前
投稿: 85
Topic starter  

o(^-^)o


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました