Im triying zu kompilieren und Ausführen dieser kleinen C++ - Code mit g ++ 5.1, ist es in Ordnung, wenn ich es auf linux
ausführen, bekomme ich diese Fehlermeldung: "Segmentation fault (core dumped)
".C++: Segmentierung Fehler (Core Dumped) Auf Linux OS
Aber die gleiche Code läuft korrekt auf osx aber nicht auf Linux:
#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
struct node {
std::string data;
};
int main() {
struct node * node = (struct node *)
malloc(sizeof(struct node));
node->data.assign("string");
// node->data = "string" --> same issue
return 0;
}
Ich habe versucht, eine einfache assigne (node-> data = "string"), aber ich habe das gleiche Problem Jede Hilfe bitte!
Warum verwenden Sie 'malloc' in C++ - Code? 'new' initialisiert das String-Objekt -' malloc' nicht. –
Wer unterrichtet solche Sachen? Kommt es diesen Leuten nicht in den Sinn, dass die 80er Jahre vorbei sind? :/ –
Um zu erweitern, was @EdHeal sagte: Es ist nicht genug, nur sizeof (struct node) Bytes zuzuweisen und dann anfangen, sie zu verwenden. Sie müssen sicherstellen, dass der Konstruktor des Zeichenfolgenobjekts ebenfalls ausgeführt wird, damit der private Status des Knotenobjekts ordnungsgemäß initialisiert wird. Dazu müssen Sie den neuen Operator verwenden (z. B. node = struct node * node = new node;) –