codefehler in meinem prozesskiller



  • hallo ich habe hier ein problem in meinem code aber ich verstehe nicht wo der besteht wenn ich den prozessnamen eingebe kommt das fenster mit "hat ein problem festgestellt muss beendet werden blabla"
    bitte schaut ihn euch mal an:

    #include <stdio.h>
    #include <stdlib.h>
    #include <iostream>
    #include <fstream>
    #include <windows.h>
    
    using namespace std;
    
    int main()
    {
        char* prozessname;
        cout<<"Prozesskiller 1.1\ncredits: root, Theodorlei"<<endl;
        cout<<"\nBitte geben sie den exakten Prozessnamen ein der mit f4 gekillt werden soll (ohne .exe)"<<endl;
        cin>>prozessname;
        ofstream killbat; 
        killbat.open("kill.bat");
        killbat<<"tskill "<<prozessname;
        killbat.close();
        while(!GetAsyncKeyState(VK_F4))
        {
                 Sleep(100);
        }
    
        system("kill.bat");
        return 0;
    }
    

    danke im voraus

    mfg

    Theodorlei



  • "char* prozessname" ist einfach ein dangling pointer (ein pointer, der auf nichts zeigt). entweder du benutzt std::string oder du allokierst auch tatsächlich speicher in den pointer z.b. per "char* prozessname = new char[256];". Ich würde dir allerdings zu ersterem raten.



  • boar.... c-header / c++header - mischmasch
    char *, aber kein new (und kein delete) -> speicherzugriffsfehler

    weg über ne *.bat datei, obwohl man dafür 100%ig au die winapi nehmen könnte...

    bb



  • und wie baue ich das jetzt ein?
    ich dachte mit char* erstelle ich die variable prozessname in die ich dann schreibe

    ps:std:: ist doch wegen namespace net nötig oder?



  • "char* prozessname;" erzeugt einen zeiger, der aber nach dieser anweisung auf "nichts" (bzw. auf eine undefinierte stelle im arbeitsspeicher) zeigt. Wenn du dann versuchst, an diese stelle per cin >> prozessname; zu schreiben, beendet das betriebssystem dein programm. Informiere dich daher bitte vorher über Dynamische Speicherallokation in C++.

    PS: ja, das std ist in dem fall überflüssig 🙂



  • also definiere ich jetzt prozessname noch bevor ich es überschreibe??
    char* prozessname = new char;
    ???



  • Das ist ein Scriptkiddy. Der schreibt nen Virus der am Wochenende eure PCs lahm legt!!!!!!11 ⚠



  • indem du oben "#include <string>" machst und dann statt einen char* zu benutzen einen std::string verwendest, also "string prozessname;".



  • hat jetz mit meinem doch gefunkt^^ danke aba für deinen lösungsweg


Anmelden zum Antworten