[Erledigt]System.AccessViolationException



  • Hi,

    es ist mir ja schon fast peinlich, aber ich bekomme es nicht ordentlich hin, ein char Array um eine Stelle zu verlängern und ein '\n' ranzuhängen.

    char *parameter_full = new char[strlen(parameter)+1];
    sprintf(parameter_full,"%s\n",parameter);
    ...
    delete parameter_full;
    

    Nach ein paar Ausführungen bekomme ich eine System.AccessViolationException...

    Was stimmt damit nicht?



  • Du berücksichtigst das Terminierungszeichen nicht:

    char *parameter_full = new char[strlen(parameter)+1+1];// +1 für \n +1 für \0
    


  • Oh, noch ein Fehler! Du hast ein Memory-Leak in deinem Code:

    delete parameter_full;
    

    Wenn du new[] benutzt, dann musst du auch delete[] verwenden:

    delete[] parameter_full;
    


  • Verdammt, das hätte ich doch alles wissen müssen....so, Schluss für heute.
    Danke dir!



  • In C (Ausnahme: new[] und delete[] ):

    const char *parameter = "Test";
    
    char *parameter_full = new char[strlen(parameter) + 2];
    
    memcpy(parameter_full, parameter, strlen(parameter) + 1);
    strcat(parameter_full, "\n");
    
    printf("%s", parameter_full);
    
    delete[] parameter_full;
    

    In C++:

    const std::string parameter = "Test";
    
    std::string parameter_full = parameter + "\n";
    
    std::cout << parameter_full << std::endl;
    

    Fazit: Wenn du schon in C++ programmierst, dann nutze auch das, was die Sprache schon bietet!



  • klöklökl schrieb:

    Fazit: Wenn du schon in C++ programmierst, dann nutze auch das, was die Sprache schon bietet!

    Das die Leute immer die verwendung der STL mit der Hochsprache C++ verwechseln,.... nenene



  • zeusosc schrieb:

    klöklökl schrieb:

    Fazit: Wenn du schon in C++ programmierst, dann nutze auch das, was die Sprache schon bietet!

    Das die Leute immer die verwendung der STL mit der Hochsprache C++ verwechseln,.... nenene

    Dass die Leute immer die STL mit der C++-Standardbibliothek verwechseln... nenene :p


Anmelden zum Antworten