Так что у меня возникает раздражающая проблема segfault в этой функции, которая, как предполагается, увеличивает размер массива.C++, создающий новый массив, вызывающий 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++;
}
Когда я запускаю это в то время как с помощью GDB, он говорит мне, что мой выдаёт ошибку сегментации, вызвана этой линии:
Argument * newlist = new Argument[argc+1];
Я думал, что это может быть проблема с калибровкой (# членов против буквальным размер в байтах), поэтому я пробовал:
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'? Можете ли вы построить [минимальный тестовый сценарий] (http://sscce.org)? –
argc инициализируется равным 0 во всех конструкторах узла – nanoprogrammer
Скомпилируйте с '-g' и опубликуйте значение argc (p argc) в точке, где он segfaults. Есть ли причина, по которой вы не используете std :: vector? – JRG