J'ai un problème étrange où un simple cout dérange mes pointeurs précédemment définis. Voici le code:cout écrase certains de mes pointeurs
union Value {
bool a;
long long val;
int next;
};
struct Clos { //not a "closure" in its actual sense.
vector<Value**> args;
function<void()> method;
};
Clos* prepare() {
Clos* closure = new Clos();
Value* a = nullptr; //these values do not exist yet, but I need these pointers to rename them at RT
Value* b = nullptr;
Value* out = new Value; //this exists
closure->args.push_back(&a); //save adresses to rename them later
closure->args.push_back(&b);
closure->method = [&a, &b, &out](){out->val = a->val + b->val;}; //just some operation on arguments
return closure;
}
Ici, je crée un objet « fermeture » avec la fonction liée (une « méthode ») qui utilise des pointeurs ne sont pas encore définis comme arguments, qui seront liés plus tard lors de l'exécution.
plus tard: (comme nullpointers)
int main(void) {
Clos* clos = prepare();
Value a; //now we get input values at RT
a.val = 7;
Value b;
b.val = 8;
*clos->args[0] = &a; //we bind them to previously "dangling" pointers
*clos->args[1] = &b;
cout << "WOLOLOLOLO"; //<<<<---- COMMENT OUT THIS LINE AND BOOM!
clos->method(); //this works, as long cout is not called
}
Y at-il un problème avec la façon dont je définis au départ a et b Obtiennent-ils désallouées ou quelque chose? J'ai essayé de les rendre "statiques" mais ça ne marche pas non plus. Quelque chose ne va pas sur le niveau général :(
cela ressemble à un comportement non défini me – Rakete1111
double possible de [Créer un signal avec Gtkmm] (http://stackoverflow.com/questions/40822089/create-a -signal-with-gtkmm) – wasthishelpful
Vous p Robably besoin d'afficher un ensemble COMPLET de code qui peut être exécuté. –