这里非常新的初学者和我在这个任务的最后绳索,非常感谢任何帮助:)。提前道歉。
我在检索和设置动态分配的2D数组的值时遇到了一些麻烦。我有一个类,定义如下,应该构造一个2D数组,此时我需要选项将值设置为数组中的给定点,并且还要检索给定点的值。
我运行了调试器,并且当setValue函数运行时,我发现我有一个分段错误。任何人都可以帮助我理解我做错了什么吗?作为一个初学者,更容易的条款更好:)。提前谢谢你。
#include <iostream>
using namespace std;
class array2D
{
protected:
int xRes;
int yRes;
float ** xtable;
public:
array2D (int xResolution, int yResolution);
~array2D() {}
void getSize(int &xResolution, int &yResolution);
void setValue(int x,int y,float val);
float getValue(int x,int y);
};
array2D::array2D(int xResolution, int yResolution)
{
xRes=xResolution;
yRes=yResolution;
float ** xtable = new float*[yResolution];
for(int i=0;i < yResolution;i++)
{
xtable[i] = new float[xResolution];
}
for(int i=0;i < yRes;i++)
{
for(int j=0;j < xRes;j++)
{
xtable[i][j]=45;
}
}
}
void array2D::getSize(int &xResolution, int &yResolution)
{
xResolution=xRes;
yResolution=yRes;
cout << "Size of Array: " << 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];
}
int main()
{
array2D *a = new array2D(320,240);
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 i=0;i < yRes;i++)
{
for(int j=0;j < xRes;j++)
{
cout << a->getValue(i,j) << " ";
}
cout << endl;
}
delete[] a;
}
答案 0 :(得分:6)
该行
float ** xtable = new float*[yResolution];
创建一个函数局部变量。类的成员变量仍然未初始化。那不是你想要的。要分配内存并将其分配给成员变量,请从该行中删除类型说明符。只需使用:
xtable = new float*[yResolution];
此外,您需要在这些行中切换yResolution
和xResolution
的使用。否则,getValue
和setValue
将错误地使用索引。
在以下行中交换使用xResolution
和yResolution
,以便您使用:
float ** xtable = new float*[xResolution];
for(int i=0;i < xResolution;i++)
{
xtable[i] = new float[yResolution];
}
在以下行中交换使用xRes
和yRes
,以便您使用:
for(int i=0;i < xRes;i++)
{
for(int j=0;j < yRes;j++)
{
xtable[i][j]=45;
}
}
由于您的班级使用动态内存分配获取资源,因此您应该阅读The Rule of Three并相应地更新您的班级。
答案 1 :(得分:0)
context.Set<Item>().Include(x => x.SubItems.OrderBy(x => x.Name));
使用此代码,您可以在 C++ 中创建一个二维动态数组,该数组将在堆内存中分配该数组的内存。