2016-03-18 11 views
0

ich eine Funktion unter Like:einen Void Pointer Buffer Argument aufrufen wirft Runtime Error

void Dump(uint32_t sig, const void *buf, int bytes_to_send) { 
} 

, die von der UT-Code aufgerufen werden muss.

habe ich versucht, den folgenden Code-Schnipsel zu nennen:

Method1:

// string to char* - but thats not what I want 
    string *pStr = new string("Where is my place in Memory?"); 
    uint32_t sig = 4; 
    Dump(sig,pStr,100); 

Method2:

// char to string 
    char tab[4]; 
    tab[0] = 'c'; 
    tab[1] = 'a'; 
    tab[2] = 't'; 
    tab[3] = '\0'; 
    Dump(4,&tab,sizeof(tab)); 

Method3:

int i=0; 
    char aPointer[] = "I love earth and all its creatures."; 
    char *pCarrier[sizeof(aPointer)]; 
    for (i = 0; i < sizeof(aPointer); i++) 
     pCarrier[i] = &aPointer[i]; 
    Dump(4,pCarrier ,sizeof(aPointer)); 

Alles Compiliert Aber die RunTime Verhalten ior Fehler wie

Invalid read of size 2 
==16492== at 0x4A08DAC 
==16492== Invalid read of size 8 
Memcheck:Addr2 

Andere Fehler:

==24108== Use of uninitialised value of size 8 

Bitte einige Vorschläge Freunde teilen !!

+0

ein wenig irreführend, ein Array zu nennen 'aPointer', meinen Sie nicht? – emlai

+0

Entschuldigung, es ist ein Tippfehler .. – godson

+0

Ihr Compiler sollte sich beschweren über 'char * pCarrier = & aPointer;'. Bitte beheben Sie alle Compiler-Nachrichten und veröffentlichen Sie einen [MCVE] (http://stackoverflow.com/help/mcve) –

Antwort

1
  1. Methode 1 wird nicht funktionieren, weil Dump() keine Ahnung hat, was ein string* ist oder, was damit zu tun.
  2. Methode 2 funktioniert nicht, da Sie die Adresse tab anstatt tab senden.
  3. Methode 3 wird nicht funktionieren, da es ein Array mit der Adresse jedes Elements aPointer auffüllt.

Versuchen:

char message[] = "My message"; 
const size_t len = strlen(message); 
Dump(4, message, len); 
+0

Vielen Dank für Ihre Anregung .. Ich werde versuchen, dies ... – godson

+0

Ich habe versucht, Ihre Lösung und habe die folgende Fehlermeldung "== 24108 == Verwendung von nicht initialisierten Wert der Größe 8" – godson

+0

Wenn Sie mit '-g' kompilieren, werden Sie in der Lage sein, die Zeilennummern in der Valgrind-Ausgabe zu sehen. –

Verwandte Themen