Speicherbug in C Programm



  • int * matvec(int **A, int *x, int n) 
    {
       int i, j;
    
       int *y = (int *)malloc( n * sizeof(int));
    
       for(i = 0; i < n; i++) {
          for(j = 0; j < n; j++) {
             y[i] = A[i][j] * x[j];
       }
      }
      return y;
    }
    

    in diesem Stück Code soll ein/mehrere Bugs versteckt sein. Ich habe aber keine Ahnung wo...



  • meine Idee wäre darf eine Funktion einen lokal deklarierten Zeiger zurückgeben?



  • hamsterbacke1234 schrieb:

    meine Idee wäre darf eine Funktion einen lokal deklarierten Zeiger zurückgeben?

    Da y auf dynamischen Speicher zeigt, ist da kein Problem.

    Der Algorithmus ist falsch.
    Die j-Schleife hat keinen Effekt und kann somit auf j = n-1; reduziert werden.



  • sorry das sollte ein += statt einem = sein.


  • Mod

    Drück dich doch mal klar aus, dann kann man dir wahrscheinlich helfen, derzeit ist das nämlich fast unmöglich. Folgende Informationen fehlen:

    1. Was ist wirklich der Code? Copy&Paste statt abtippen! Sonst verschwendest du bloß noch mehr Zeit damit, Leute wie DirkB nach Fehlern suchen zu lassen, die erst beim Abtippen entstanden sind.

    2. Wie kommst du darauf, dass der Code fehlerhaft ist? Funktioniert er nicht? Wenn ja, inwiefern? Außerdem wäre dann das vollständige Programm hilfreich. Weil dein Lehrer es sagt? Wenn ja, was ist die genaue Hausaufgabe? Weil dein Vorgesetzter/Kollege es sagt? Wenn ja, was genau haben sie gesagt? Geht es möglicherweise um Stil- und/oder Logikfehler anstatt um technische Programmierfehler?



  • hat sich eh erstmal erledigt, da ich die Aufgabe schon abgegeben habe.



  • hamsterbacke1234 schrieb:

    sorry das sollte ein += statt einem = sein.

    Dann fehlt die Initialisierung von Y.



  • hamsterbacke1234 schrieb:

    hat sich eh erstmal erledigt, da ich die Aufgabe schon abgegeben habe.

    Schön, daß Du nichts lernen willst. Spart Arbeit.



  • ich habe momentan ein schweres Semester mit vielen Fächern. Da muss man auch ein bisschen haushalten: was macht man zuerst, was lässt man weg/schiebt es nach hinten in der Prioritätenliste etc..
    Du unterstellst mir das ich nichts lernen will ohne auch nur im geringsten die Hintergründe zu kennen. Das finde ich ziemlich unverschämt!



  • ja und du belästigst andere leute mit aufgaben, die du eigentlich selbst lösen sollst, ohne deren hilfen dann annehmen zu wollen.

    meine vermutung wäre jetzt übrigens im hinblick auf die tatsache, dass der titel "speicherbug in c programm" und die gegebene funktion "matvec" lautet (für den fall, dass du doch noch was lernen willst), dass eine quadratische matrix A mit einem vektor x multipliziert werden und das ergebnis als y zurück gegeben werden soll, was bedeutet, dass der angeforderte speicher einfach um den faktor n zu klein ist und du da in nicht angeforderten speicherbereichen herum schreibst.



  • lol einen hilfebeitrag in einem Forum, dass durchaus dafür gedacht ist nennst du "belästigen" xD



  • @hamsterbacke1234
    Ja doch so wie du das gebracht hast könnte man das schon sagen.
    Macht keinen Spass zu versuchen Leuten zu helfen die
    ... was fragen
    ... dabei den falschen Code posten
    ... dann Rückfragen für 2 Tage nicht beantworten
    ... und danach dann einfach nur mehr posten "hat sich erledigt weil jetzt is schon zu spät"

    DAFUQ?

    Dass du nur 2 Tage Zeit hattest wusstest du vorher schon. Dann guck eben vorher ein paar mal rein um eben z.B. Rückfgragen beantworten zu können.

    Oder schreib gleich dazu dass du nicht vor hast dir dafür Zeit zu nehmen und dass du gar nicht daran interessiert bist es zu lernen sondern nur dass du was möglichst nicht zu falsches abgeben kannst. Dann wissen deine potentiellen Helfer wenigstens worum es geht, und werden ggf. darauf verzichten ihre Zeit für jemanden zu opfern der einfach nur will dass man ihm seine Hausaufgaben macht.



  • hamsterbacke1234 schrieb:

    lol einen hilfebeitrag in einem Forum, dass durchaus dafür gedacht ist nennst du "belästigen" xD

    komm doch aus deinem hohen Ross herunter, wir sind niemandem verpflichtet, zu Helfen, eine Antwort zu geben, zu raten, was der/die Fragestellender/in gemeint hat, ...

    Wir machen das alles in unsere Freizeit und wir helfen, das ist ein Fakt. Die Tatsache, dass dieses Forum seit mehr als 10 Jahre ohne Pausen existiert (ich weiß nicht einmal wie lange, ich habe mich vor ca. 12 Jahren angemeldet) zeigt, dass wir helfen. Aber weil wir das nicht beruflich machen, haben wir eben unsere Ansprüche und wenn jemand wie du kommt, der nicht einmal seine Frage korrekt formuliert, werden wir kaum helfen.

    Du hast gezeigt, dass du wenig Interesse daran hast, deine Frage verständlich zu machen oder sogar ein eine Lösung interessiert bist. Und auch wenn ich mir Zeit fürs Antworten nehmen wollte, habe ich mich entschieden, nicht zu antworten, weil ich das als Zeitverschwendung empfunden habe. Und dann sagst du "hat sich eh erstmal erledigt, da ich die Aufgabe schon abgegeben habe.". Wofür soll ich mir die Zeit nehmen, vielleicht 15 oder 30 Minuten meiner Freizeit zu opfern, eine Lösung für dein Problem zu schreiben, wenn du vielleicht nicht einmal die Antwort sehen wirst, denn "es hat sich eh erledigt"? 😕 Reine Zeitverschwendung unsererseits. Somit war Swordfishs Antwort angebracht.


Log in to reply