Optimierungs einstellung des GCC (LINUX) verändert verhalten

OP #3440370
Lesenswert?

Hi,

bin grad auf ein merkwürdiges Phänomen gestoßen. Ich versuche derzeit 
einen DLNA-Client, den es bisher nur als Gtk+ Programm gibt als Console 
umzustricken zwecks späterer Verwendung auf einem Beagle Bone Black.

In diesem code
1
static void
2
append_media_server (GUPnPDeviceProxy *proxy)
3
{
4
        GUPnPDeviceInfo   *info;
5
        GUPnPServiceProxy *content_dir;
6
        char              *friendly_name;
7

8

9
        info = GUPNP_DEVICE_INFO (proxy);
10

11
        content_dir = get_content_dir (proxy);
12
        friendly_name = gupnp_device_info_get_friendly_name (info);
13

14
        if ( (friendly_name != NULL) && (content_dir != NULL)) {
15
                GList      *child;
16

17
                g_list_append(MediaServers,proxy);
18

19
                g_free (friendly_name);
20

21
                /* Append the embedded devices */
22
                child = gupnp_device_info_list_devices (info);
23
                while (child) {
24
                        append_media_server(GUPNP_DEVICE_PROXY (child->data));
25

26
                        g_object_unref (child->data);
27
                        child = g_list_delete_link (child, child);
28
                }

habe ich etwas sehr merkwürdiges beobachtet. Lasse ich die 
Optimierungseinstellungen der Compiler auf -o2, bekomme ich für 
"friendly_name" keine vernünftigen Werte (Überprüft im Debugger). 
Schalte ich die Optimierung aus, bekomme ich lesbare Namen.

Füge ich bei eingeschalteter Optimierung die Zeile
1
        cout << friendly_name << endl;

hinter gupnp_device_info_get_friendly_name ein, bekomme ich auch 
ordentliche Werte. Kann mir einer erklären warum? Auch ohne die Ausgabe 
wird friendly_name ja in der if Abrage benutzt, sollte daher ja auch 
nicht wegoptimiert werden.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren