c++ - 类范围问题的 vector ?

标签 c++ class vector

vector<ClassX> xVec;

if (inputFile.peek() == '$')
{
    classX classXInstance;           //<==================== local instantiation
    readFileElements(classXInstance);//<== pass by reference
    if(classXInstance.validate())
    {
       xVec.push_back(classXInstance);///<=============== added here
    }
    /// destructor of the local copy is called here
}

我得到一个核心转储,试图调试,但是我收到了很多 gdb 的垃圾消息,我只能看到 vector 被破坏了,不确定是否因为调用了析构函数是一个原因??

编辑:

我的类(class)是这样的

class ClassX
{
 public:
    ClassX() { numberOfX=0; ppXX = NULL; };
   ~ClassX();
   void validate();
   char **setX(const vector<string>& Xss);
   inline char **getX() {return ppXX;};
 private:
    int numberOfX;
    char **ppXX;
};

它包含一个如下的析构函数

ClassX::~ClassX()
{
    if (ppXX != NULL)
    {
        for(int i=0; i < numberOfXX; i++)
        {
            if (ppXX[i] != NULL)
            {
                delete [] ppXX[i];
                ppXX[i] = NULL;
            }
        }

        // Free array of pointers.
        delete [] ppXX;
        ppXX = NULL;
    }
}

setX 分配所有必要的内存

验证给我 ppXX[i] 的打印输出,如果元素数量与字符串 vector 的大小匹配则返回 true

最佳答案

一份 classXinstance存储在 xVec 中, 用指针 ppXX到内存中的一个区域。现在您有两个指向同一区域的对象。片刻之后,classXinstance被摧毁,所以该地区受制于delete . xVec 中的元素现在指向无效内存。

最好的选择是使用 std::Vector<std::string>而不是 char **ppXX ;字符串 vector 负责引用和分配,因此您无需担心正确的构造/复制/销毁。

关于c++ - 类范围问题的 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18359028/

相关文章:

c++ - 图像不失真后如何找到特征的新位置?

c++ - std::addressof 是否否定 STL operator& 要求?

c++ - 在 C++ 中添加静态库时的意外行为

c++ - QDateEdit 验证

class - 使用并行的Delphi XE类: how to?

Java - 异常处理 - 如何重新输入无效输入

c++ - 类和运算符

c++ - 将元素附加到 vector 会导致后续排序失败

python - 从向量列表中找到最接近的向量 | Python

C++指针 vector <base_class*>放置派生类但切片打印