sqrt(x) funktioniert nicht



  • Hallo community,

    Ich habe einen Laufzeitfehler 😞

    Wenn ich ein kleines Nebenprogramm schreibe, funktioniert das:

    #include <iostream>
    #include <cmath>
    
    using namespace std;
    
    int main()
    {
    	cout << sqrt(9);
    	system("Pause");
    }
    

    Aber in meinen Haupprogramm erhalte ich beim debuggen genau beim Wurzelziehen:
    <"sqrt.asm" wurde nicht gefunden>

    Bis jetzt hab ich nur herausgefunden, dass es da um eine nicht herausgefunden Assembleradresse geht.
    Mit Assembler kenne ich mich aber gar nicht aus

    Viele Dank im Voraus für eure Antworten!

    mfg



  • sqrt funktioniert schon.

    Allerdings findet der Debugger nicht den Quellcode dafür.
    Den hast du i.A. auch nicht, da sqrt in der C-Standardbibliothek steht.



  • Wahrscheinlich ziehst du die Wurzel aus einer negativen Zahl oder sonst irgendwas ungültigem. Das erzeugt eine Exception in sqrt, so dass der Debugger dort anhält und sich in der Folge über den fehlenden Quellcode beschwert.

    Kann man schwer sagen ohne mehr Details, aber jetzt findest du das Problem wahrscheinlich selbst.



  • Hallo DirkB,

    Soll das heißen ich soll statt cmath math.h inkludieren.
    Das hab ich auch schon probiert und bringt leider auch nichts.
    Oder verstehe ich deine Aussage falsch?

    mfg



  • Hallo Bashar,

    nein leider keine irregulären Übergabeparameter.

    mfg


  • Mod

    Das erzeugt eine Exception in sqrt

    Nein, es gibt einen sog. domain error, und sqrt gibt einen implementationsspezifischen Wert zurück (bei der libstdc++ ist es -nan).

    Edit: Jetzt verstehe ich erst, was Bashar mit Exception meint, nämlich FE_INVALID (die man anscheinend als invalid argument exception bezeichnet). Die bringt aber nicht das Programm dazu, anzuhalten oder abzustürzen. Außerdem ist es ziemlich verwirrend, diesen Begriff in einem C++-Board zu nutzen.



  • Hast du irgendwas in den Einstellungen deines Projekts verändert? Wenn der Linker die Definitionen der Funktionen nicht findet liegt das wohl daran, dass du nicht alle Standard Libs einbindest.



  • Alda schrieb:

    Oder verstehe ich deine Aussage falsch?

    Ja, tust du.

    Du hast den Quellcode für die Standardlibrary nicht.
    (Und wenn doch, weiß der Debugger nicht wo der steht).
    Das ist halt so bei Libraries. Dafür sind sie auch da (Funktionen ohne Quellcode zu verteiben).

    Das schränkt aber die Funktion von dem Programm nicht ein.



  • Arcoth schrieb:

    Edit: Jetzt verstehe ich erst, was Bashar mit Exception meint, nämlich FE_INVALID (die man anscheinend als invalid argument exception bezeichnet). Die bringt aber nicht das Programm dazu, anzuhalten oder abzustürzen.

    Nicht das Programm, den Debugger. Dachte ich jedenfalls, aber das scheint nicht der Fall zu sein.

    Außerdem ist es ziemlich verwirrend, diesen Begriff in einem C++-Board zu nutzen.

    Ich kann ja nichts dafür, dass der OP ein Problem mit seiner IDE im C++-Board postet.

    DirkB schrieb:

    Du hast den Quellcode für die Standardlibrary nicht.

    Das ist doch nur ein sekundäres Problem. Warum wird der Quellcode von sqrt überhaupt angefordert? Das kann doch nur heißen, dass der Debugger innerhalb dieser Funktion gestoppt wurde.



  • Bashar schrieb:

    Arcoth schrieb:

    Edit: Jetzt verstehe ich erst, was Bashar mit Exception meint, nämlich FE_INVALID (die man anscheinend als invalid argument exception bezeichnet). Die bringt aber nicht das Programm dazu, anzuhalten oder abzustürzen.

    Nicht das Programm, den Debugger. Dachte ich jedenfalls, aber das scheint nicht der Fall zu sein.

    Naja, ich traue deiner Vermutung mehr als der Aussage von Alda.



  • Bashar schrieb:

    Warum wird der Quellcode von sqrt überhaupt angefordert? Das kann doch nur heißen, dass der Debugger innerhalb dieser Funktion gestoppt wurde.

    Oder der TO ist im Einzelschritt da rein gelaufen - weil er mal sehen wollte, wie das Programm so abläuft.



  • Wieso behauptet er dann, das sei ein Laufzeitfehler?


Anmelden zum Antworten