Bonjour,
j'ai un problème pour retourner une union depuis une fonction. Voici un petit programme qui met en évidence le problème et qui crashe lorsque la fonction f retourne u.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 #include<stdio.h>#include<stdlib.h> #include <string> using namespace std; union uni { struct { int v1; string v2; }; struct { string v3; char v4; int v5; }; }; uni f() { uni u; u.v1 = 1; u.v2 = "Hello"; return u; } int main () { uni u=f(); return 0; }
Je travaille avec visual studio => compilateur MS
Le message d'erreur est le suivant:Je ne comprends pas quel est le problème avec la mémoire. Pourtant la taille de l'union est connue du compilateur et le résultat est passé par la pile. Le fait que l'union contienne des string ne doit pas modifier sa taille car la partie variable de la chaine (les caractères donc) doit se trouver dans le tas.Exception de première chance à 0x0f94797f (msvcp90d.dll) dans bidon.exe : 0xC0000005: Violation d'accès lors de l'écriture à l'emplacement 0x00000001.Exception non gérée à 0x0f94797f (msvcp90d.dll) dans bidon.exe : 0xC0000005: Violation d'accès lors de l'écriture à l'emplacement 0x00000001.
Merci d'avance pour vos suggestions
Partager