Der Compiler Laufzeit segfault auf folgenden Code wirft:struct Stringwert enthält, verursacht Segmentierungsfehler auf seine Aufgabe nach ihrer Gründung mit dynamischen Speicherzuweisung
#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;
}
Kann jemand bitte erklären, warum Zeichenfolge Zuordnung nicht innerhalb einer Struktur funktioniert das wird dynamisch zugewiesen, wo im Falle einer statischen Zuweisung, warum es funktioniert?
wo wie folgt funktioniert es:
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;
}
und dann in der Hauptfunktion:
int main() {
Node n2 = initNode("Hello");
cout << n2.data << endl;
}
'malloc' weist nur Speicher zu, es konstruiert * die Objektinstanz nicht, was bedeutet, dass der Konstruktor' string' nicht aufgerufen wird. –
Allgemeine Faustregel: Verwenden Sie in C++ nicht Cs "malloc", verwenden Sie "new", und verwenden Sie, falls möglich, auch nicht "new" und verwenden Sie "make_shared" oder "std :: unique_ptr" (C + +11) –