J'ai donc un problème de segfault ennuyeux dans cette fonction qui est censée augmenter la taille d'un tableau.C++ créer un nouveau tableau provoquant 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++;
}
Quand je lance ce tout en utilisant gdb, il me dit mon segfault est causée par cette ligne:
Argument * newlist = new Argument[argc+1];
Je pensais que ce serait peut-être un problème avec la taille (nombre de membres vs littéral taille en octets) donc j'ai essayé:
Argument * newlist = new Argument[sizeof(Argument)*(argc+1)]
Mais cela provoque aussi une erreur de segmentation exactement de la même manière. Aidez-moi?
S'il est utile: Voici les définitions de nœud et Argument
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
};
Quelle est la valeur de 'argc'? Pouvez-vous construire un [test-case minimal] (http://sscce.org)? –
argc est initialisé à 0 dans tous les constructeurs du noeud – nanoprogrammer
Compilez avec '-g' et affichez la valeur de argc (p argc) au point où il se sépare. Y a-t-il une raison pour laquelle vous n'utilisez pas std :: vector? – JRG