C++ és egy ismeretlen számú byte tömb.
2016-12-22T14:50:55+01:00
2016-12-22T15:28:36+01:00
2022-08-10T11:25:38+02:00
nova76
Sziasztok.

Már megint a C++ és a használhatatlan típusai a kérdésem. Bocs, ha ezzel valakinek a lelkébe gázoltam.  

Szóval, Arduinon szeretnék egy Byte* data[] tömbe beleírni ismeretlen számú adatot. Hogyan? Simán növelve egy számlálót nem tudok beleírni:

counter = 0; data[counter] = 11; counter++ data[counter] = 12 ...
A fordító persze lefordul megint, de futás közben elhasal (már a második elemnél, szóval nem a memória kevés). Ilyenkor mindig sok jót kívánok LC-nek és az Ő típusainak, remélem csuklik sokat.

Hogy esetleg alternatívát is fel tudjatok kínálni, a feladat az lenne hogy SD kártyáról olvasnék be byteokat. Mivel byteokat írtam egy fileba, így byteokat is kapok vissza Most lehetne olyan megoldás hogy első adat (mondjuk 2-3 byteon tárolva) az a beírt byteok száma, meg szenvedhetnék mindenfélével, de egy ciklussal úgyis végigolvasom az egészet, azzal együtt meg is tudom számolni. Viszont ha előre definiálnom kell akkor vagy 2x olvasom át a filet, vagy letárolom valahol az eltárolt byteok számát. Reménykedem hogy ez nem ilyen bonyolult.

Köszi a választ.
Mutasd a teljes hozzászólást!
a Byte* data[] tömbdeklaráció "csak" egy pointer, azaz valahova mutatnia kellene. Tipikusan malloc() vagy new kell, amivel lefoglalsz memóriaterületet. Másképp már az első beleírásnál összerondítod a memóriát, hibaüzenet a minimum.
Esetleg std::vector típus - nem tudom, van-e ilyen Arduinon.
Mutasd a teljes hozzászólást!

  • Így (méret megadása, vagy inicializálás nélkül) csak nulla hosszú tömböt tudsz csak létrehozni. Ha nem tudod előre a méretet, akkor kell a fájlbeolvasás előtt fopen, fseek, ftell, majd a visszakapott bájtméret után lehet létrehozni a szükséges méretű bájt-tömböt, amibe aztán beolvashatod a fájlodat.
    Mutasd a teljes hozzászólást!
  • És eljott a nap amikor már nem a Java, meg a C# a nagyszeru amiért elhozta nekunk a managed memoryt, hanem a C++ kaki mer' abba nincs.

    A fájl méretét tipikusan fájlrendszer bejegyzésekbol szokás kiolvasni. Ez akkor hasznos ha az a bizonyos file 45GB. Ilyenkor nem kell 4 napot várni az eredményre.

    Ha ez megvan akkor lehet akkorát foglalni amekkora kell. Ez byte tomb legyen, ne pedig byte-okra mutató pointerek tombje.
    Mutasd a teljes hozzászólást!
  • Köszi, ez a malloc kulcsszó sokat segített, legalább tudom merre tovább

    És köszi a többieknek is a segítséget.
    Mutasd a teljes hozzászólást!
abcd