Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 类范围问题的向量? 向量xVec; 如果(inputFile.peek() { classX classXInstance;//_C++_Class_Vector - Fatal编程技术网

C++ 类范围问题的向量? 向量xVec; 如果(inputFile.peek() { classX classXInstance;//

C++ 类范围问题的向量? 向量xVec; 如果(inputFile.peek() { classX classXInstance;//,c++,class,vector,C++,Class,Vector,将classXInstance的副本存储到xVec中,指针ppXX指向内存中的一个区域。现在有两个对象指向同一区域。过了一会儿,classXInstance被销毁,因此该区域将被删除。xVe中的元素c现在指向无效内存 最好的选择是使用std::Vector而不是char**ppXX;字符串向量负责引用和分配,因此您无需担心正确的构造/复制/销毁。您的ClassX?您可以发布ClassX的定义吗?一份classXInsta如果ClassX有任何动态分配的成员,则必须遵循三个规则。或者,如果c++1

classXInstance
的副本存储到
xVec
中,指针
ppXX
指向内存中的一个区域。现在有两个对象指向同一区域。过了一会儿,
classXInstance
被销毁,因此该区域将被
删除。xVe中的元素c现在指向无效内存


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

您的
ClassX
?您可以发布
ClassX
的定义吗?一份
classXInsta如果
ClassX
有任何动态分配的成员,则必须遵循三个规则。或者,如果c++11支持,则可以将其移动:
xVec.push_-back(std::move(classXInstance));
。我很抱歉,但保证
readFileElements()
ClassX
的成员变量执行动态分配,并且所述类不符合要求。这需要更多信息。请发布垃圾消息好吗?什么不存储字符串向量?(这并不排除您必须遵循三的规则,但我想它会更干净一些?是的,我知道,但我正在尝试将ppXX(argv)发送到execv(const char*path,char*const argv[]));系统调用,因此它必须是双精度的pointer@abdul不,您可以在调用
exec()
之前将字符串转换为
char**
;无需将其存储在此表单中。将其转换为char**,作为execv()之前的最后一步;这样,通过字符串向量,计算机将帮助您进行内存管理。创建std::vector arguments,用每个字符串的数据()填充它,最后运行execv(path,arguments.data())
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
}
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;
    }
}