这段代码使用while循环来获取用户输入并执行适当的命令-为了简洁起见,我将其简化为2个命令。
正确创建了Oblock对象(命令“O”),以及指向基类的指针也是如此。似乎对两个对象的调用也正常工作。
但是,返回到while循环后,指向该对象的指针似乎丢失了,尝试访问其成员(命令“t”)会导致段错误。
我在下面包括了示例代码-之后便是我的问题。
#include<vector>
#include<iostream>
#include<string.h>
using namespace std;
class Tetramino {
private:
int squareSize;
vector<string> myShape;
public:
void setValues(int size) {
squareSize = size;
myShape = vector<string> ((size*size), ".");
}
string getValues(int i) {
return myShape[i];
}
int getSize() {
return squareSize;
}
};
class Oblock : public Tetramino {
public:
Oblock() {
setValues(2);
}
};
main () {
string input;
bool runProgram = true;
Tetramino *pBlock;
while (runProgram) {
cin >> input;
if (input == "O")
{
Oblock myBlock;
cerr << "0thi: " << myBlock.getValues(0) << endl;
Tetramino *pBlock = &myBlock;
cerr << "0thi: " << pBlock->getValues(0) << endl;
}
if (input == "t")
{
cerr << "0thi: " << pBlock->getValues(0) << endl;
}
}
return 0;
}
在此先感谢您的任何建议!我搜索了与此类似的问题,但找不到适合我需要的问题。
最佳答案
Tetramino *pBlock
在其范围内是本地的。您正在main
中的那一者和if
中的那一者遮蔽。
另外,myBlock
是本地的,将被破坏-您将有一个悬空的指针。您应该分配new
(和delete
...)
当您处理“O”输入(并处理上一个的Tetramino *pBlock = &myBlock;
)时,请使用pBlock = new Oblock;
代替delete pBlock
。
关于c++ - 指向基类的指针在while循环中丢失,从而导致段错误。 C++,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23707768/