Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.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++ C++;创建新阵列导致segfault_C++_Arrays_Class_Memory_Segmentation Fault - Fatal编程技术网

C++ C++;创建新阵列导致segfault

C++ C++;创建新阵列导致segfault,c++,arrays,class,memory,segmentation-fault,C++,Arrays,Class,Memory,Segmentation Fault,所以我在这个函数中遇到了一个恼人的segfault问题,它应该增加数组的大小 void Node::pushArg(Argument arg) { Argument * newlist = new Argument[argc+1]; for (int i = 0; i < argc; i++) newlist[i] = args[i]; newlist[argc] = arg; delete[] args; args = newlis

所以我在这个函数中遇到了一个恼人的segfault问题,它应该增加数组的大小

void Node::pushArg(Argument arg)
{
    Argument * newlist = new Argument[argc+1];
    for (int i = 0; i < argc; i++)
        newlist[i] = args[i];
    newlist[argc] = arg;
    delete[] args;
    args = newlist;
    argc++;
}
我认为大小可能有问题(成员的大小与字节的文字大小),所以我尝试:

Argument * newlist = new Argument[sizeof(Argument)*(argc+1)]
但这也会以完全相同的方式导致segfault。帮忙

如果有用的话:下面是节点和参数的定义

class Argument
{
public:
    bool nested; // is the Argument a string, or a nested Node?
    char * str_content; // string value
    Node * nested_node; // Pointer to nested note

    Argument(); // Null intializer
    Argument(char *); // Create string node 
    Argument(Node *); // Create nested node
    Argument(const Argument&); // Copy constructor
};

class Node
{
public:
    char * head; // Head of list (function)

    int argc; // # of arguments
    Argument * args;

    Node(); //intialize null
    Node(char *); // intialize with head

    void pushArg(Argument); // Add an argument to list

    char * toString(); // the Node in String Format
};
鉴于“argc”是一个成员值,segfault可能是由“this”是无效值(可能为NULL)引起的。您可以通过执行以下操作来检查这一点

void Node::pushArg(Argument arg)
{
    size_t numArgs = argc + 1;
然后在该线路发生故障时查看“this”的值

您可能还应该使用“-Wall-Wextra-O0-g”进行编译,以从您的工具中获得最大程度的调试帮助。

鉴于“argc”是一个成员值,segfault可能是由“this”是无效值(可能为NULL)引起的。您可以通过执行以下操作来检查这一点

void Node::pushArg(Argument arg)
{
    size_t numArgs = argc + 1;
然后在该线路发生故障时查看“this”的值


您可能还应该使用“-Wall-Wextra-O0-g”进行编译,以从您的工具中获得最大程度的调试帮助。

argc的值是多少?你能构造一个吗?argc在所有带有'-g'的NodeCompile构造函数中被初始化为0,并在argc(p argc)出现故障的地方发布argc的值。有什么理由不使用std::vector吗?是的,我想我会转到std::vector,虽然我最初没有这么做,因为我被要求尽可能使用数组。
argc
的值是多少?你能构造一个吗?argc在所有带有'-g'的NodeCompile构造函数中被初始化为0,并在argc(p argc)出现故障的地方发布argc的值。有什么理由不使用std::vector吗?是的,我想我会转到std::vector,虽然我本来没有,因为我被要求在可能的情况下使用数组god调用,问题是节点没有复制构造函数,所以当我使用push_back()将节点添加到堆栈时,argc丢失了,当我试图创建一个大小大于40亿:P(或-0249240356,无论它选择什么)的数组时,导致了一个segfault好调用,问题是节点没有复制构造函数,所以当我使用push_back()将一个节点添加到堆栈时,argc丢失,当我试图创建一个大小大于40亿:P的数组时导致了一个segfault(或-0249240356,无论它选择什么)