麻烦的呼叫基地建设者-获取读取访问冲突

时间:2019-04-24 11:04:12

标签: c++ visual-c++

我正在建立一个使用'DFS'作为'Search'的子类的程序,并调用其基本构造函数。

程序运行良好,直到我在调用构造函数之后放置的断点为止,在其中收到错误:

抛出异常:读取访问冲突。 _Pnext为0xCCCCCCD0。

我试图仅将代码总结为重要的内容。

在main.cpp中:

DFS search(gridSize, startPoint, endPoints, walls);

在Search.h中:

public:
    Search(unsigned int gridSize, unsigned int startPoint, unsigned int endPoints[2], vector<int> walls);

在Search.cpp中:

#include "Search.h"

Search::Search(unsigned int gridSize, unsigned int startPoint, unsigned int endPoints[2], vector<int> walls)
{
    sGridSize = gridSize;
    sStartPoint = startPoint;
    sEndPoints[2] = endPoints[2];
    sWalls = walls;
}

在DFS.h中:

#include "Search.h"

#include <vector>

public:
    DFS(unsigned int gridSize, unsigned int startPoint, unsigned int endPoints[2], vector<int> walls);

在DFS.cpp中:

#include "DFS.h"

DFS::DFS(unsigned int gridSize, unsigned int startPoint, unsigned int endPoints[2], vector<int> walls) : Search(gridSize, startPoint, endPoints, walls)
{

}

如果需要更多代码来理解这一点,请问-我担心粘贴太多。

非常感谢您的帮助:)

1 个答案:

答案 0 :(得分:2)

使用sEndPoints[2] = endPoints[2],您可以访问两个元素数组的 third 元素。而且您只分配该值。

C ++解决方案是使用std::array而不是“旧的” C样式数组。或std::vector

如果您不想这样做,那么解决方案是使用构造函数初始化器列表,在其中初始化成员变量,而不是分配给它们。例如

Search::Search(unsigned int gridSize, unsigned int startPoint, unsigned int endPoints[2], vector<int> walls)
    : sGridSize(gridSize), sStartPoint(startPoint), sEndPoints(endPoints), sWalls(walls)
{
}