前提・実現したいこと
ループの中とループの外で別々にカウントをしていき、
メモリを開放したい。
発生している問題・エラーメッセージ
現状、プログラムはできたものの、ループを1回だけ回すと正常に動きますが、
複数回回そうとするとエラーを吐きます。
*** Error in `./check': corrupted size vs. prev_size: 0x0000000000f89f30 ***
該当のソースコード
c++
1#define LOOP1 10 2#define LOOP2 15 3#define L 5 4int main(void){ 5int loop1,loop2=0; 6Complex *pn; 7 pn = new Complex [LOOP2]; 8Complex *in; 9 in = new Complex [L]; 10 11for(loop1=0;loop1<LOOP1;loop1++){ 12 13 for(loop2=0;loop2<LOOP2;loop2++){ 14 funcA(in, pn, L, loop2); 15 } 16} 17 18delete [] pn; 19delete [] in; 20 21return 0; 22}
c++
1void funcA(Complex *in, Complex *pn, int L, int loop2){ 2 int i; 3 //ここでpn配列の値を決める 4 for(i=0;i<L;i++){ 5 in[i] *= pn[loop2]; 6 } 7}
試したこと
ループ回数の変更、メモリ解放する位置、メモリ確保する位置の変更
補足情報(FW/ツールのバージョンなど)
わかりづらいものですいません。
長さLの配列inに対して、ループ2を回していき、長さ0〜L-1に対してpnを
かけます。pnはループ2を回すたびに、値が変わっていきます。
ex.
in[0] = in[0] * pn[0];
in[1] = in[1] * pn[0];
...
in[L-1] = in[L-1] * pn[0]; //ループ2の1回終了
in[0] = in[0] * pn[1];
...
in[L-1] = in[L-1] * pn[1]; //ループ2の2回目終了
...
...
in[0] = in[0] * pn[LOOP2-1];
...
in[L-1] = in[0] * pn[LOOP2-1]; //ループ2のすべて終了
ここまできたら、ループ1を1回追加して、再びループ2を回します。
配列pnはループ1を回すたびに書き換えず、一回回したらそれをループ2にかけていっても構わないのですが、わからなかったので、現状は、ループ1を回すたびに変更するようになっています。
配列inとpnの掛け算はできるだけメインとは別の関数で行いたく思っております。
メモリのエラーだとは承知しているのですが、なかなか直せなかったので助言等
いただければと思います。お願いします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/08 09:43
2019/01/08 10:53
2019/01/08 12:33
2019/01/10 01:48