C++ 调整 2D 矢量内存大小错误
c++ resize 2D vector memory error
我有一个小类:头文件 - 网格.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;
};
实现 - 网格.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中以调试模式运行时,SetGrid
GridData.push_back(row)
变坏了,我在bool _Inside(const value_type *_Ptr) const
的矢量中停止了。
运行后出现错误消息:
测试网格中0x0028F249的首次机会异常.exe: 0xC0000005:访问违规读取位置0x00000038。未处理 测试网格.exe中0x0028F249异常:0xC0000005:访问 违规读取位置0x00000038。
我以前做过这些类型的2D操作,取得了巨大的成功。我尝试使用调整大小和push_back具有相同的结果。有人有提示吗?
问题出在以下几行上:
std::shared_ptr<Grid> NoiseGrid;
NoiseGrid->SetGrid(NoiseArray, nx, ny);
从 http://en.cppreference.com/w/cpp/memory/shared_ptr/shared_ptr:
默认构造函数
构造一个没有托管对象的
shared_ptr
,即空shared_ptr
用
std::shared_ptr<Grid> NoiseGrid(new Grid);
NoiseGrid->SetGrid(NoiseArray, nx, ny);
相关文章:
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 是否值得降低我的代码的可读性,以便在出现内存不足错误时提供异常安全性?
- 内存错误低于在C++年实现埃拉托色尼筛分时的预期
- 共享内存:MapViewOfFile 返回错误 5
- 将 vector<vector<int>> 传递到函数中会产生内存错误
- 释放动态内存时C++错误
- 我有一个线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x8)错误.我认为这是由于内存管理不好.我可以
- 复制内存给出分段错误
- C++程序错误:malloc():内存损坏
- 在我的以下代码中获取 MLE(内存限制错误).尝试解决 ROUND C 2019(问题 A-摆动行走)启动问题
- 为什么删除分配的阵列会导致内存错误?
- 需要找到3个小错误-内存错误
- 错误:内存位置的 std::length_error
- 修复了瓦尔格林德错误内存泄漏的错误
- 错误:“内存集”未在此范围内声明
- OpenCV 2.4.5运行时错误内存
- OpenCV错误:内存不足
- STL映射,设置错误:内存超出分配块的末尾
- GLUT:致命错误:内存不足
- MPI错误:内存不足-有哪些解决方案选项