[Linker Fataler Fehler] Fatal: Zugriffsverletzung. Link beendet.



  • Ach ... was auch nich wichtig ist. Im Release-Mod kann ich Kompilieren. Leider ist das Ergebnis nicht das gewünschte!
    Das Programm startet, zählt aber nur die Häufigkeit des ersten eingegebenen Wortes.

    Eingabe:

    Hallo
    Hallo
    e
    Test
    Test
    e
    e
    quit

    Ausgabe:

    Hallo 2
    e 1638147
    Test 1638146
    quit 1638145

    Auffällig ist hier, dass e am häufigsten vorkommt und den höchsten Zahlenwert hat. Die anderen weichen genau um die Differenz der Eingabehäufigkeiten ab.



  • Ohne irgendetwas an den Einstellungen verändert zu habe, konnte ich folgenden Code kompilieren!

    //---------------------------------------------------------------------------
    
    #pragma hdrstop
    
    #include <iostream>		//OK
    #include <vector>		//OK
    #include <string>		//OK
    
    //---------------------------------------------------------------------------
    
    void wait();			//OK
    
    #pragma argsused
    int main(int argc, char* argv[])
    {
    	std::cout << "IOStream works!" << std::endl;	//OK											
    
    	std::vector<std::string> arrString;				//OK
    	std::string str = "String works also!";			//OK
    
    	arrString.push_back("Vector works too!");		//OK
    	arrString.push_back("Just");					//OK
    	arrString.push_back("a");						//OK
    	arrString.push_back("few");						//OK
    	arrString.push_back("Strings");					//OK
    
    	std::vector<std::string>::iterator it;			//OK
    
    	std::cout << "\n";								//OK
    
    	for(it = arrString.begin(); it != arrString.end(); it++)		//OK
    	{
    		std::cout << *it << std::endl;				//OK			
    	}
    
    	std::cout << "\nCool - I can use also iterators!" << std::endl;		//OK
    
    	wait();
    	return 0;
    }
    
    void wait()
    {
    	std::cin.clear();	//OK
    	std::cin.sync();	//OK
    	std::cin.get();		//OK
    }
    //---------------------------------------------------------------------------
    


  • und hier kommt die nächste Merkwürdigkeit:

    Ich habe folgenden Code:

    //---------------------------------------------------------------------------
    
    #pragma hdrstop
    
    #include <iostream>
    #include <string>
    #include <vector>
    
    //---------------------------------------------------------------------------
    
    struct Pair
    {
    	std::string word;
    	int count;
    };
    
    std::vector<Pair> pairs;
    
    void wait();
    void insert(const std::string& str);
    void print();
    
    #pragma argsused
    int main(int argc, char* argv[])
    {
    	std::string inStr = " ";
    
    	while(inStr != "quit") {
            std::cin >> inStr;
    	}
    
    	wait();
    	return 0;
    }
    
    void wait()
    {
    	std::cin.clear();
    	std::cin.sync();
    	std::cin.get();
    }
    
    void insert(const std::string& str)
    {
    	bool b = false;
    
    	std::vector<Pair>::iterator it;
    	if(str != "quit")
    	{
    		for(it = pairs.begin(); it != pairs.end(); it++)
    		{
    			if(it->word == str) {
    				it->count++;
    				b = true;
    				break;
                }
    		}
    
    		if(!b)
    		{
    			Pair p = {str, 1};
    			pairs.push_back(p);
            }
    	}
    }
    
    void print()
    {
    //	std::cout << "Count of each word:";
    //
    //	std::vector<Pair>::iterator it;
    //	for(it = pairs.begin(); it != pairs.end(); it++)
    //	{
    //		std::cout << " ";
    //	}
    }
    
    //---------------------------------------------------------------------------
    

    Sobald ich die Funktion print definieren will, kommt der Linker-Error,
    ich muss nur void print() {} schreiben und schon spinnt der Linker.
    Meldung mal wieder:

    [Linker Fataler Fehler] Fatal: Zugriffsverletzung. Link beendet.

    Eine VCL Anwendung kann ich aber problemlos kompilieren.



  • Aktiviere mal Multithreading. Ich weiß nicht, wie ausführlich die Konfiguration ohne Multithreading getestet worden ist.

    Ansonsten läßt sich das Problem möglicherweise umgehen, indem du den Linker durch eine neuere Version ersetzt, die du von einem aktuelleren C++Builder-Release (2007, 2009, 2010, XE) ausleihen könntest.

    Wenn das Problem trotz aller Maßnahmen weiterbesteht, wäre ich für ein komplettes Projekt, mit dem das Problem reproduzierbar ist, dankbar.



  • Jetzt tritt der Fehler nicht mehr auf, aber der Turbo Incremental Linker funktioniert nicht mehr.



  • Cooter schrieb:

    Jetzt

    Was hast du nun geändert?

    Cooter schrieb:

    aber der Turbo Incremental Linker funktioniert nicht mehr.

    Das heißt konkret?

    Edit: Typographie



  • Ich habe eine neues Projekt mit Multithreading erstellt und nur den Quellcode kopiert.
    Mehr habe ich nicht gemacht 😉

    Kann es denn sein, dass hier im Forum nur ich das Problem so lange habe?



  • Wenn Du Turbo C++ 2006 Explorer nutzt wirst Du öfters mal auf solche Probleme stoßen, speziell die Templateverarbeitung ist dort einfach *kaputt*. Ich hatte sowas auch schon öfter (Linkerfehler in Verbindung mit Templates), mit einem halben Tag rumprobieren kann man es dann aber meist hinbekommen.



  • Und was hast du dagegen gemacht?

    Ist ja blöd, wenn die Templates nicht funktionieren. Dann installiere ich mir besser wieder Delphi anstatt C++ 😛 Ne Quatsch - aber ehrlich gesagt ist das doch sehr bescheiden, dass gerade das nicht funktioniert, was C++ eigentlich attraktiv macht.



  • Nichts. Wie Du ja schon rausgefunden hast, kann man die meisten Probleme dieser Art lösen, indem man den Code etwas umstellt. Man muss aber in jedem Fall penibel darauf achten, dass man sich keine Syntaxfehler in den Code baut, denn manchmal kompiliert der Template-Code sogar mit Syntaxfehlern (funktioniert dann aber nicht).


Anmelden zum Antworten