Im essayant de compiler et d'exécuter ce petit code C++ en utilisant g ++ 5.1, il est compilé correctement, quand je l'exécute sur linux
j'obtiens ce message d'erreur: "Segmentation fault (core dumped)
".C++: erreur de segmentation sous Linux OS
Mais le même correctement code exécuté sur Mac OS X, mais pas sur 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;
}
i essayé simple assigne (node-> data = "string"), mais je suis le même problème Toute aide s'il vous plaît!
Pourquoi utilisez-vous 'malloc' dans du code C++? 'new' va initialiser l'objet chaîne -' malloc' ne l'est pas. –
Qui continue d'enseigner des trucs comme ça? N'arrive-t-il pas à ces gens que les années 80 sont terminées? :/ –
Pour développer ce que @EdHeal a dit: il ne suffit pas d'allouer juste sizeof (struct node) octets, puis de commencer à les utiliser. Vous devez vous assurer que le constructeur de l'objet chaîne s'exécute également, de sorte que l'état privé de l'objet nœud sera initialisé correctement. Pour ce faire, vous devez utiliser le nouvel opérateur (par exemple, noeud = noeud de la structure * noeud = nouveau noeud;) –