所以我得到这个编程入门任务,我必须写一个程序,找到的第n个成员按以下顺序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);
}
***检测到堆损坏:正常块后***您最有可能超出一个或多个动态数组的范围。 – drescherjm
如果您使用'std :: vector'而不是动态分配,那么您可以使用'at()'来表明您要超出数组范围。 [见这里](http://ideone.com/1tVUXC)。最后一个循环出现问题('look [i] = say [i];')。由于您似乎在使用Visual Studio,因此在出错时应立即抛出“out_of_range”异常,而不是在程序终止时出现“堆损坏”错误, –
PaulMcKenzie