将动态值分配给数组

时间:2015-11-02 18:44:02

标签: c++

我正在制作一种类似peggle的游戏,它会询问用户他们想要的切换板有多大(所有三角形),为什么他们想要抛出许多球(ping)。并且有机会向右走o。我想我真的很接近我刚开始收到这个错误:

  

lab6.exe中0x00DB6253处的未处理异常:0xC0000005:
    访问冲突读取位置0xFDFDFDFD。

在运行期间counts[init1][init2] = counts[init1][init2] + 1;行。

#include <iostream>
#include <array>
#include "time.h"

using namespace std;

int main()
{
    srand(time(NULL));
    int bins = 0;
    int pings = 0;
    int init1 = 0;
    int init2 = 0;
    int percent;
    cout << "How big would you like the triangle?" << endl;
    cin >> bins;
    cout << "How many pings?" << endl;
    cin >> pings;
    cout << "percent to go right?" << endl;
    cin >> percent;

    int **counts = new int*[bins];
    for (int i = 0; i < bins; i++)
    {
        counts[i] = new int[i + 1];
    }
    for (int j = 0; j < bins; j++)
    {
        for (int k = 0; k <= j; k++)
        {
            counts[j][k] = 0;
            //cout << counts[j][k] << " ";
        }
        cout << endl;
    }

    for (int i = 0; i < pings; i++)
    {
        for (int j = 0; j < bins - 1; j++)
        {
            int random = rand() % 101;
            if (random <= percent)
            {
                counts[init1][init2] = counts[init1][init2] + 1;
                init1++;
                init2++;
            }
            else
            {
                init1++;
                if (init2 != 0)
                {
                    init2--;
                }
                counts[init1][init2] = counts[init1][init2] + 1;
            }
        }
    }

    for (int i = 0; i < bins; i++)
    {
        delete[] counts[i];
    }
    delete[] counts;

    system("pause");
    return 0;
}

3 个答案:

答案 0 :(得分:0)

在这个地方:

init1++;
if (init2 != 0)

在递增之后你不会检查是否init1 < bins

答案 1 :(得分:0)

我不确切知道你在做什么,但显然你没有在内部for循环之后重置init1和2。

当执行init1 ++ ping *(bins - 1)次时,它超过了已分配的计数数组大小。

答案 2 :(得分:0)

这就是我解决问题的方法:

for (int i = 0; i < pings; i++)
{
    int init1 = 0;
    int init2 = 0;
在i-loop的第一次迭代中,

init1的范围从0到bins ...但由于它没有被重置,所以它下次开始时不是0而是{{1}这太大了。

我假设bins也需要重置为0,但由于我不确定你的程序的意图,我不能发誓。如果没有,您可以将其重置为适当的。