繁体   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