C probleme mit malloc in while

Der Code ist schlecht bzgl Speichermgmt.
Und zudem eine Endlosschleife in der ständig Speicher geholt und nicht freigegeben wird. Das gibt zwangsläufig auch Speicherfehler.

Warum malloc(1) ? Ein Byte holt man sich nicht vom heap sondern auf dem Stack.
Die Schleife muss auch beendet werde
Wo ist das free?
 
LencoX2 schrieb:
Warum malloc(1) ? Ein Byte holt man sich nicht vom heap sondern auf dem Stack.
Die Schleife muss auch beendet werde
Wo ist das free?
Müsste ich schauen wo ich das gefunden hatte, da war das zumindest so als Beispiel für malloc etc etc

Hast du ein Beispiel für eine endlosschleife? :)
 
Wenn es um kleine Speichergrössen geht schätzt man die max größe und macht einfach
Code:
char tmp[64];
Natürlich mit error check und ggf malloc / free wenn man mehr als 64 bytes braucht.

Selbst die Linux Kernel Entwickler versuchen von C weg zu kommen weil Speicher Fehler immer noch für viele Bugs verantwortlich sind.
Rust ist da ein Thema.
Ich verwende gerne C++ aber damit kann man sich auch schnell ins Knie schießen.
Keine Ahnung wo der Bot für was eingesetzt werden soll. Go oder vielleicht sogar Python wären einfacher als C
 
  • Gefällt mir
Reaktionen: tollertyp
Dank dir cloudman, ich habs so einmal probiert und bisher läuft es.

Error check und co müsste ich mir dann anschauen.
 
C ist halt relativ low-level. Wieso nicht gleich Assembler?

Sorry, aber es gibt Sprachen, die sind für dein Problem besser geeignet. Du kannst auch mit einem Auto über den Acker fahren, aber ein Traktor ist dafür dennoch besser geeignet. Du kannst einen Schraubendreher auch als Hammer benutzen, oder eine Bohrmaschine.

Warum Werkzeuge nehmen, die zum Problem passen? Wenn du C wenigstens beherrschen würdest, so dass du weißt, was du machst, dann würde ich ja nicht mal was sagen.

@cloudman: Hab auch an Go oder Python gedacht, man könnte sogar über nodejs nachdenken. Wobei ich kein großer JS-Fan bin, wenn dann lieber auf TypeScript setzen.
Ergänzung ()

BLACKDIAMONT schrieb:
Dank dir cloudman, ich habs so einmal probiert und bisher läuft es.
Das mit dem Array ist im Übrigen genau das, was ich in meinem ersten Beitrag schrieb,.Nicht dynamisch, sondern auf den Stack... Deshalb auch die Frage, wie groß das Ding werden kann, und mein Hinweis, dass wenn eine URL zusammengebaut wird, eigentlich ~1 KB das Maximum darstellen sollte. Deshalb ja auch meine Frage, wie groß denn die zu erwartenden Werte so sind. 64 Byte ist noch weit darunter

Ach und oh wunder, es funktioniert besser.

Dynamische Speicherverwaltung sollte man dann verwenden, wenn es nicht anders geht, oder zumindest wenn man weiß, was man tut.
 
@tollertyp
Assembler beschte Kappa :D

Spaß beseite, klar die richtigen Tools sind wichtig ;)
Ich finde aber das eine Programmiersprache nicht etwas ist, das mal eben gelernt ist. C++ hatte ich mir damals auch angeschaut, war aber ziemlich schnell mit nem Knoten im Kopf wieder weg :lol:

Hab jetz eben einfach mal ne größe Festgelegt und hoffe das reicht ... ich denke mir halt -> kleinvieh macht auch mist und unnötig Speicher belegen muss ja nicht sein, oder? Wenn dynamisch da einfach komplett Falsch ist, dann mach ich das halt so. :)
 
Ich glaube eher, dass bei dir das Problem die Konzepte sind, und nicht die Sprache. Und wenn du dann eine Sprache nimmst, die dir halt für viele Probleme keine einfachen Lösungen bietet, und du dann nicht mal versuchst die Konzepte zu verstehen/zu lernen (dynamische Speicherverwaltung), dann ist es vielleicht besser eine Sprache zu nehmen, die gar keinen für dich so unnötigen Overhead bietet.

Wenn du Fahrschüler bist, lernst du Autofahren, aber du lernst auch das Auto kennen. Das Autofahren ist das Konzept, das Auto im übertragenen Sinne die Sprache. Der Vergleich mag krass klingen, aber im Grunde ist es fast so.

Aber du kannst gerne weiter die Bohrmaschine als Hammer verwenden.
 
  • Gefällt mir
Reaktionen: BLACKDIAMONT
Ich habe C/C++ aufgegeben, nachdem wir an der Uni mal OpenCL / C++ code geschrieben haben (15k LoC) welcher bei verwendung von free instant gecrasht ist, ohne das wir irgendwie rausgefunden haben warum.
Am Ende haben wir das free entfernt und unsere Demo so angepasst, dass der OOM error erst nach Präsentationsende erfolgt.

Hier von mir demnach nur mal ein Link zu Rust für embedded programming.
https://www.rust-lang.org/what/embedded
Wie schon angemerkt wird vmtl. auch der nächste Linux Kernel Rust Treiber unterstützen.
Ist zwar noch experimentell, aber zumindest einfache microkontroller sollten schon ganz ok laufen.
Für alle die lieber GCC als LLVM mögen, es sind auch wahlweise ein rustc_gcc backend sowie ein rust frontend für gcc in Entwicklung.

Alternativ ist noch https://godbolt.org/z/qazWs85sr für solche Diskussionen nett, egal ob C, C++, oder Rust

Zuletzt gibt es auch transpiler zwischen C und Rust. An sich zwar eher um von legacy C auf Rust zu wechseln, Ich vermute aber der ein oder andere könnte dir dann auch aus Rust (sicheren) C code generieren.
 
Ja C++ ist ziemlich unübersichtlich geworden wenn man nicht täglich damit arbeitet - besonders fremder Code kann verwirrend sein. In meinen Anfangszeiten wollte jedes Feature verwenden und hab mich grandios verrannt.
Als ich mich dann mit esphome beschäftigt habe und selbt ein paar Dinge beigetragen habe musste ich meine alten Skills auffrischen und bin mittlerweile ganz zufrieden - std::string, unique_ptr, ein paar andere goodies und flache Klassenhierachien machen das Leben einfacher.
Wobei Dinge wie CPR und anderes abgefahrene template Zeug bei mir für Knoten im Kopf sorgt.
C# fand ich eigentlich ganz gut aber es ist eben nicht für alles geeignet.

Go erscheint mir sehr sauber gerade für async Programmiererung.

Aber ich denke Rust ist eine gute Alternative - nur muss ich über ein Hello World hinaus kommen.

Ich bin auch kein Freund von Sprachen hopping weil zumindest ich doch einige Praxis brauche um mich an die Konzepte anzupassen.

C zu können schadet nie - für Anfänger allerdings nicht unbedingt die beste Einstiegssprache
 
  • Gefällt mir
Reaktionen: BLACKDIAMONT
Danke für eure Antworten :)
C war noch die Wahl, da ich es auch von Arduino gewohnt bin. Aber ein Mikrocontroller ist kein PC und das meiste was ich verwende sind snippets von der Doku etc.

Rust hab ich mal fix überflogen .. sieht aus wie C++ und Javascript :D
In Go hatte ich mal reingeschaut für ein Projekt, das sah für mich von der Syntax wie C aus.

Mal in die Runde gefragt:
Was für eine Sprache würdet ihr nehmen für mein Vorhaben? PHP (ja ich weis das es eine Script sprache ist) hatte ich 2008 mal hobbymässig angefangen, daher hab ich vieles damit gebastelt .. nicht unbedingt Ideal .. aber es läuft. Die Syntax gefällt mir wie gesagt, daher dachte ich an C :)
Anforderung ist nur Linux X86 und ARM (Raspi und Co).
 
Welche Sprache? Die am besten beherrscht wird!

Dazu noch ein wichtiger Rat: Erfinde nicht das Rad neu. Das ist ein Antipattern.
Wenn ich dich richtig verstanden habe, möchtest du eine Abfrage gemäß https://matrix.org bauen. Dann nutze eine der SDKs für die Sprache, die du am besten beherrschst.
Wenn es aus irgendeinem Grund unbedingt C sein soll, da gibt es auch C SDKs. Nutze sie!
 
Matrix hat eine Client-API die ich in PHP nutze, sprich ich frage dort mit Curl die API ab.

Das möchte ich gerne erweitern. Mein Gedanke ist ein mini-httpd für die Bot config und LUA für Erweiterungen.

Aktuell nutze ich https://github.com/maubot/maubot als bot ... das ist aber Python und gefällt mir mal so gar nicht ..
Da nach meiner Meinung LUA einfacher ist, kam ich auf die Idee ;)

Mit PHP kann ich das irgendwo auch realisieren ... aber PHP ist eigentlich nicht dafür gedacht.

SDKs sind vorhanden, aber nur für C++ und IOS-Objective-C ...

Welche Sprache? Die am besten beherrscht wird!
Jap ... PHP wäre das ... C wie man sieht ist es noch nicht :lol:
 
Es gibt nur leider kein PHP SDK.

Von PHP ist es ein weiter Sprung zu C, wie du siehst.
Nach Abzug von Python, weil es dir nicht zusagt, bleibt nur JavaScript übrig.
Alle anderen Sprachen sind noch weiter weg von PHP.
 
LencoX2 schrieb:
Welche Sprache? Die am besten beherrscht wird!
Beherrschen ist relativ.
Und eigentlich sollte die Sprache gewählt werden, die zum Problem passt.

Selbst wenn man PHP beherrscht, für die Entwicklung einer iOS-App bringt das meines Kenntnisstands wenig. Natürlich geht es hier nicht darum. Ich möchte nur veranschaulichen, dass die Sprache zum Problem eben passen muss.
 
Ich schaue mir einmal Go an, das würde mir zumindest bei einem Projekt in der Firma entgegen kommen.
 
  • Gefällt mir
Reaktionen: tollertyp
  • Gefällt mir
Reaktionen: aroxx, tollertyp und cloudman
Etwas OT, aber wenigstens zu malloc in loop:
 
  • Gefällt mir
Reaktionen: KitKat::new()
Zurück
Oben