簡體   English   中英

C ++:訪問沖突

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM