Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 程序编译,但偶尔会因255(代码块)原因崩溃_C++_Arrays_Codeblocks - Fatal编程技术网

C++ 程序编译,但偶尔会因255(代码块)原因崩溃

C++ 程序编译,但偶尔会因255(代码块)原因崩溃,c++,arrays,codeblocks,C++,Arrays,Codeblocks,您好:)我是一个非常新的程序员,不明白为什么我会有这个错误。为了解释,当我运行程序(下面的代码)时,行中有不同的值 array2D *a = new array2D(320,240); (例如,将320和240更改为32和24)程序在执行getSize函数或执行prtValue函数(通常是前者)后的某个时间崩溃。但是,当我构建代码时,不管上面一行中的值是多少,它都会返回0个错误和0个警告 我已经在cpp.sh上测试了代码,该站点每次都会准确地更改值并输出正确/完整的结果,所以我想知道这是否是代

您好:)我是一个非常新的程序员,不明白为什么我会有这个错误。为了解释,当我运行程序(下面的代码)时,行中有不同的值

array2D *a = new array2D(320,240);
(例如,将320和240更改为32和24)程序在执行getSize函数或执行prtValue函数(通常是前者)后的某个时间崩溃。但是,当我构建代码时,不管上面一行中的值是多少,它都会返回0个错误和0个警告

我已经在cpp.sh上测试了代码,该站点每次都会准确地更改值并输出正确/完整的结果,所以我想知道这是否是代码块/我的硬件问题?调试器也只返回一个问题,它似乎与setValue函数有关,但我未经训练的眼睛无法分辨出哪里出了问题

为无知道歉。再说一次,我在这方面几乎没有经验,有点不知所措。提前感谢您可能提供的任何帮助

#include <iostream>
using namespace std;

class array2D
{
protected:
    int xRes;
    int yRes;
    float ** xtable;
public:
    array2D (int xResolution, int yResolution); 
    void getSize(int &xResolution, int &yResolution);
    void setValue(int x,int y,float val);
    float getValue(int x,int y);
    ~array2D();
};

array2D::array2D(int xResolution, int yResolution)
{
    xRes=xResolution;
    yRes=yResolution;

    xtable = new float*[xResolution];

    for(int i=0;i < xResolution;i++)
    {
        xtable[i] = new float[yResolution];
    }

    for(int i=0;i < xRes;i++)
    {
        for(int j=0;j < yRes;j++)
        {
            xtable[i][j]=0;
        }
    }
}

void array2D::getSize(int &xResolution, int &yResolution)
{
    xResolution=xRes;
    yResolution=yRes;
    cout << "Size of Array (rows, columns): " << xResolution << ", " << yResolution << endl;
}

void array2D::setValue(int x,int y,float val)
{
    xtable[x][y] = val;
}

float array2D::getValue(int x,int y)
{
    return xtable[x][y];
}

array2D::~array2D(){
    cout << "Destructing array" << endl;
}

int main()
{
    array2D *a = new array2D(32,24);
    int xRes, yRes;
    a->getSize(xRes,yRes);
    for(int i=0;i < yRes;i++)
    {
        for(int j=0;j < xRes;j++)
        {
            a->setValue(i,j,100.0);
        }
    }

    for(int j=0;j < xRes;j++)
    {
        for(int i=0;i < yRes;i++)
        {
            cout << a->getValue(i,j) << " ";
        }
        cout << endl;
    }

    a->~array2D();
}
#包括
使用名称空间std;
类数组2d
{
受保护的:
int xRes;
国际年;
浮动**xtable;
公众:
阵列2d(int x分辨率,int y分辨率);
void getSize(int&x分辨率、int&y分辨率);
无效设置值(整数x,整数y,浮点值);
浮点值(整数x,整数y);
~array2D();
};
array2D::array2D(整数X分辨率,整数Y分辨率)
{
xRes=xRes分辨率;
yRes=yResolution;
xtable=新浮点*[xResolution];
对于(int i=0;i您是否在以下块中错误地使用了
xRes
yRes

for(int i=0;i < yRes;i++)
{
    for(int j=0;j < xRes;j++)
    {
        a->setValue(i,j,100.0);
    }
}

您在以下块中使用的
xRes
yRes
不正确:

for(int i=0;i < yRes;i++)
{
    for(int j=0;j < xRes;j++)
    {
        a->setValue(i,j,100.0);
    }
}

手动调用析构函数几乎总是一个坏主意。我想你的意思是,
delete a;
就在结尾处。建议以后阅读它可以避免很多混乱。@user4581301谢谢你让我知道-我会删除该部分并进行研究!手动调用析构函数几乎总是一个坏主意。我想你的意思是
delete a
就在最后。建议以后阅读它可以避免很多混乱。@user4581301谢谢你让我知道-我将删除该部分并进行研究!当然!我不知道我看了多少次,仍然认为它是正确的。看起来我在下面的for循环块中的I和j位置也错了(最终调用getValue)。再一次,你是一个救世主!@KOne,我很高兴我能帮上忙。当然!我不知道我看了多少次,仍然认为它是正确的。看起来我在下面的for循环块(最终调用getValue)中I和j的位置也错了.再一次,你是救世主!@KOne,我很高兴能帮上忙。