[英]C++: Access violation
我正在创建一个矩阵,然后我想用0填充其值。
我在此行中遇到访问冲突错误:
mat1[x][y]=0;
但是我不明白为什么。
这是我的代码:
vector<float>getJenksBreaks(vector<float>uFloats,const unsigned int uNumClass)
{
float* first(&uFloats[0]);
float* last(first + uFloats.size());
std::sort(first, last);
float **mat1 = new float*[uFloats.size()];
for (int i = 0; i < uFloats.size(); ++i)
{
mat1[i] = new float[uNumClass+1];
}
for (unsigned long x=0;x<uNumClass+1;x++)
{
for (unsigned long y=0;y<uFloats.size();y++)
{
mat1[x][y]=0;
}
}
有人看到我的错误了吗?
谢谢。
而不是手动处理动态内存:
vector<float> getJenksBreaks(vector<float> uFloats, const unsigned int uNumClass)
{
std::sort(uFloats.begin(), uFloats.end());
std::vector<std::vector<float>> mat(uFloats.size());
std::for_each(mat.begin(), mat.end() [&](std::vector<float>& v)
{
v.resize(uNumClass);
});
// ...
}
或者(甚至更好)...
vector<float> getJenksBreaks(vector<float> uFloats, const unsigned int uNumClass)
{
std::sort(uFloats.begin(), uFloats.end());
std::vector<std::vector<float>> mat(uFloats.size(), std::vector<float>(uNumClass));
// ...
}
它可以完全执行您的操作,而无需担心索引的正确放置,并且不容易出错。
最后,您可以简单地创建一个简单的Matrix包装器类:
class Matrix
{
public:
Matrix(std::size_t rows, std::size_t cols) : _matrix(rows, std::vector<float>(cols))
{
}
// other matrix functions
private:
std::vector<std::vector<float>> _matrix;
};
然后将您的代码变成
vector<float> getJenksBreaks(vector<float> uFloats, const unsigned int uNumClass)
{
std::sort(uFloats.begin(), uFloats.end());
Matrix matrix(uFloats.size(), uNumClass);
// ...
}
更改这些循环
for (unsigned long x=0;x<uNumClass+1;x++)
{
for (unsigned long y=0;y<uFloats.size();y++)
{
mat1[x][y]=0;
}
}
至
for (unsigned long x=0;x<uFloats.size();x++)
{
for (unsigned long y=0;y<uNumClass+1;y++)
{
mat1[x][y]=0;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.