Il compilatore genera runtime segfault su seguente codice:struct contenente valore stringa provoca errore di segmentazione sul suo incarico dopo la sua creazione utilizzando l'allocazione dinamica della memoria
#include <iostream>
#include <string>
using namespace std;
struct Node{
int data;
void *next;
string nodeType;
};
Node* initNode(int data){
Node *n = (Node*)malloc(sizeof(Node));
n->data = data;
n->next = NULL;
n->nodeType = "Node"; //if this line is commented it works else segfault
return n;
}
int main() {
Node *n1 = initNode(10);
cout << n1->data << endl;
}
Qualcuno può spiegare perché assegnazione delle stringhe non funziona all'interno di una struttura che viene assegnato dinamicamente dove, in caso di allocazione statica, perché funziona?
dove come il seguente modo in cui funziona:
Node initNode(string data){
Node n;
n.data = data; //This works for node creation statically
n.next = NULL;
n.nodeType = "Node"; //and even this works for node creation statically
return n;
}
e quindi nella funzione principale:
int main() {
Node n2 = initNode("Hello");
cout << n2.data << endl;
}
'malloc' assegna solo memoria, non * costruisce * l'istanza dell'oggetto, il che significa che il costruttore' stringa' non viene chiamato. –
Regola generale: non usare 'malloc' di C in C++, usare' new', e in realtà non usare 'new' se possibile, e usare' make_shared' o 'std :: unique_ptr' (C + +11) –