私はこのプログラミング入門を得ました。次のシーケンスの1番目のメンバーを見つけるプログラムを作成する必要があります1、121、1213121、121312141213121 .. 。基本的に、最初のメンバーは1であり、次のメンバーは[前のメンバー] [前のメンバー]で構成されます。 N < 10.私はこの問題を理解していない、それをインターネットで検索しようとしたが、私を助けることができない何かを得なかった。ヒープ破損が検出されました:ノーマルブロック(#176)後
#include "stdafx.h"
#include <iostream>
using namespace std;
int size(int n, int realsize);
int main()
{
int n;
cin >> n;
if (n == 1) {
cout << "1";
return 0;
}
int helper = 0;
char c = '2';
char* look;
char* say;
say = new char[size(n, 1) + 1]();
look = new char[size(n - 1, 1) + 1]();
look[0] = '1';
while (helper < n) {
for (int i = 0; i < size(helper + 1, 1); i++) {
say[i] = look[i];
}
say[size(helper + 1, 1)] = c;
for (int i = size(helper + 1, 1) + 1; i < size(helper + 1, 1) * 2 + 1; i++) {
say[i] = look[i - (size(helper + 1, 1) + 1)];
}
for (int i = 0; i < size(helper + 1, 1) * 2 + 1; i++) {
look[i] = say[i];
}
helper += 1;
}
cout << say;
delete[] say;
delete[] look;
return 0;
}
int size(int n, int realsize)
{
if (n == 1)
return realsize;
else
return size(n - 1, realsize * 2 + 1);
}
***ヒープの破損が検出されました:ノーマルブロック***の後、ダイナミックアレイの1つ以上の範囲外に出る可能性が最も高いです。 – drescherjm
動的割り当ての代わりに 'std :: vector'を使っていたなら、あなたは配列の境界から外れていることを示すために 'at()'を使うことができました。 [ここをクリック](http://ideone.com/1tVUXC)最後のループは物事がうまくいかないところです( 'look [i] = say [i];')。 Visual Studioを使用しているように見えるので、プログラムが終了したときに "ヒープの破損"エラーの代わりに、間違いをした直後にout_of_range例外をスローする必要があります。 –
PaulMcKenzie