[英]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.