gpt4 book ai didi

c++调整二维 vector 内存错误

转载 作者:行者123 更新时间:2023-11-28 05:48:49 25 4
gpt4 key购买 nike

我有一个小类:头文件 - Grid.h:

class Grid
{
public:
Grid();
~Grid();
bool WriteGridToDSGrdFile(char* FileName);
bool SetGrid(float *noisearray, int nx, int ny);
private:
std::vector<std::vector<float>> GridData;
};

实现 - Grid.cpp

bool
Grid::SetGrid(float* noisearray, int nx, int ny)
{
for (size_t ix = 0; ix < nx; ix++)
{
std::vector<float> row;
GridData.push_back(row);
GridData[ix].resize(ny);
for (size_t iy = 0; iy < ny; iy++)
{
GridData[ix].push_back(noisearray[ix*ny + iy]);
}
}
return true;
}

然后是调用例程(testgrid.cpp):

int _tmain(int argc, _TCHAR* argv[])
{
int nx = 20;
int ny = 10;
float *NoiseArray = new float[nx*ny];
std::shared_ptr<Grid> NoiseGrid;
NoiseGrid->SetGrid(NoiseArray, nx, ny);
return 0;
}

在 MSVS 2013 中以 Debug模式运行时,SetGrid GridData.push_back(row) 变坏了,我在 bool _Inside(const value_type *_Ptr) const.

运行后报错:

First-chance exception at 0x0028F249 in testgrid.exe: 0xC0000005: Access violation reading location 0x00000038. Unhandled exception at 0x0028F249 in testgrid.exe: 0xC0000005: Access violation reading location 0x00000038.

我以前做过这些类型的二维操作并取得了巨大成功。我尝试使用 resize 和 push_back 得到相同的结果。有人有提示吗?

最佳答案

问题在于线路:

std::shared_ptr<Grid> NoiseGrid;
NoiseGrid->SetGrid(NoiseArray, nx, ny);

来自 http://en.cppreference.com/w/cpp/memory/shared_ptr/shared_ptr :

默认构造函数

Constructs a shared_ptr with no managed object, i.e. empty shared_ptr

使用

std::shared_ptr<Grid> NoiseGrid(new Grid);
NoiseGrid->SetGrid(NoiseArray, nx, ny);

关于c++调整二维 vector 内存错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35693163/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com