Der Ausfall der Laufzeitprüfung #2 - Stapel um die Variable 'x' wurde beschädigt

StackOverflow https://stackoverflow.com/questions/268772

  •  06-07-2019
  •  | 
  •  

Frage

Ich erhalte diesen Laufzeitprüfungsfehler bei der Rückgabe im folgenden Code. Ich glaube, ein ähnlicher Code läuft an anderer Stelle im Programm gut. Irgendwelche Ideen?

String GetVariableName(CString symbol, CString filepath)
{
    char acLine[512];
    char acPreviousLine[512];
    CString csFile;
    FILE *fp;   

    csFile.Format("%svariables.txt", filepath);

    fp = fopen(csFile, "r");

    if (! fp)
        return("");

    for (;;)
    {
        strcpy(acPreviousLine, acLine);

        // NULL means we are out of lines in the file.
        if (myfgets(acLine, 511, fp) == NULL)
            break;

        // "END" indicates end of file
        if (! strcmp(acLine, "END"))
            break;

        if (! strcmp(acLine, csVarSymbol))
        {
            // Previous line should be variable name
            fclose(fp);

            // Following line results in Check Failure while in Debug mode
            return(acPreviousLine);
        }
    }   
    fclose(fp);
    return("");
}
War es hilfreich?

Lösung

Es gibt keine Variable 'x' im obigen Beispiel, aber ich gehe davon aus, dass Sie die Fehlermeldung bearbeitet haben!

ACLINE wird nicht initialisiert. Wenn Sie es zum ersten Mal in ACPreviousline kopieren, kopieren Sie alles, was zufällig auf dem Stapel ist. Dies kann Ihnen einen Pufferüberlauf und damit einen Stapelversorgung in einigen Situationen geben - nicht alle, denn Sie könnten Glück haben und einen Null in ACLINE finden, bevor Sie zu 512 Bytes kommen.

Der Stack wird bei der Rückkehr auf Korruption überprüft, da es Schutzwörter gibt (auf dieser Plattform und Erstellung der Konfiguration - von denen ich vermute, dass sie unter Windows sind und auf VS im Debug -Modus zusammengestellt werden), die alle Stapelvariablen umgeben sind, um genau dieses Problem zu überprüfen.

Initialise acline [0] bis 0.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top