这段代码使用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;
}
  • 退出if语句时对象是否被解构?
  • 是否可能有更好的方法来反复获取用户输入?

  • 在此先感谢您的任何建议!我搜索了与此类似的问题,但找不到适合我需要的问题。

    最佳答案

    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/

    10-13 03:05