2016-11-21 4 views
-1

Ich kann nicht verstehen, warum ich die folgende Nachricht für meine Funktion unten (in Visual Studio 2015) bekomme.C - strtok_s - Access violation reading location

0xC0000005: Zugriffsverletzung beim Lesen der Position 0x0000002C.

Ich habe gelesen this answer, aber es hilft mir nicht.

Worum es bei diesem Code geht.
Es gibt eine Reihe von Ints, die in Gruppen von "Index, Wert" -Paaren getrennt sind. Indizes sind einzigartig. Jede Gruppe ist durch ein Semikolon getrennt. Beispiel: 1,2; 3,5; 2,2; 3,4
Ich versuche, ein Array von int mit jedem Wert an seinem Index zu erhalten.

Mein Code extrahiert bisher die Zeichenfolgen und legt sie in eine char* buffer.
Dann getrennt ich die Gruppen von "Index, Wert" durch die Semikolons und speichern Sie sie in char** arrayKeyValue, die ein Mitglied von struct inputElement ist. Das andere struc-Element ist ein int, das die Anzahl der "index, value" -Gruppen im Array darstellt. Ich mache das mit der Funktion "separateStringBySemicolon".

Dann versuche ich jede Gruppe von "Index, Wert" in ein neues Array zu trennen, wo jeder "Index" seinen "Wert" übereinstimmt. Ich tue dies, indem ich meine Struktur an die Funktion "separateKeyValue" übergebe. Ich benutze strtok_s, aber ich bekomme einen Fehler.

Der erste Aufruf der folgenden Funktion (token2 = strtok_s(arrayOfKeyValue[j], sepComma, &next_token2);) bringt den Fehler. Ich verstehe, dass token2 oder next_token2 nicht zugegriffen werden kann, aber ich bin mir nicht sicher. Und wenn ja, warum?

double* separateKeyValue(struct inputElement* inputElement) 
{ 
    int count = inputElement->length; 
    char** arrayOfKeyValue = inputElement->data; 

    double* arrayDecimal = malloc(count * sizeof(double)); 
    char sepComma = ','; //wrong should be char sepComma[] = ","; 
    char* token2 = NULL; 
    char* next_token2; 

    printf("Value in arrayofkeyvalue: %s", arrayOfKeyValue[0]); 

    for (size_t j = 0; j < count; j++) 
    { 
     token2 = strtok_s(arrayOfKeyValue[j], sepComma, &next_token2); 
     unsigned int index; 
     sscanf_s(token2, "%d", &index); 

     double value; 
     sscanf_s(next_token2, "%d", &value); 

     arrayDecimal[index] = value; 

     printf("res[%d] = %d\n", index, arrayDecimal[index]); 
     printf("\n"); 
    } 

    return arrayDecimal; 
} 
+0

Diese Frage fehlt viel Kontext. Welcher Input wird genau an die Funktion 'separateKeyValue' übergeben? –

+2

Was ist 'inputElement'? Was ist 'inputElement-> Daten'? Wie werden sie initialisiert? Wie und von wo nennst du diese Funktion? Bitte [lesen Sie, wie Sie gute Fragen stellen können] (http://stackoverflow.com/help/how-to-ask) und erfahren Sie, wie Sie ein [minimales, vollständiges und verifizierbares Beispiel] erstellen (http://stackoverflow.com)/hilfe/mcve). –

+0

Genauer gesagt, das Problem ist fast sicher mit einem der Werte von 'arrayofKeyValue [j]', und das ist fast das einzige, was Sie uns nicht gezeigt haben. – Useless

Antwort

1

Sie die Angabe einer char konstant, sepComma, als zweiten Parameter zu strtok_s, wo es expects eine Reihe von Begrenzungszeichen.

(nicht so) Zufälligerweise ist der ASCII-Wert ',' 0x2C.

Verwandte Themen