Globálisan elérhető dinamikus tömb

Globálisan elérhető dinamikus tömb
2015-10-30T12:30:52+01:00
2015-11-02T06:23:21+01:00
2022-10-15T22:25:29+02:00
*deleted_77141665
Sziasztok!

Visual Studio + C-ben írok egy programocskát, amiben szükségem lenne egy dinamikus tömbbre, amit globálisan elérhetek.

Van két függvény, az egyik feltölti adatokkal, a másik kiolvassa az adatokat, ez működik is, de a töltő függvény második hívásakor (ugye változhatnak az adatok) a tömböt fel akarom szabadítani a free() segítségével, és ekkor megáll a program, a vs pedig a dbgheap.c extern "C" _CRTIMP int __cdecl _CrtIsValidHeapPointer függvényének az utolsó sorára áll rá.

A program sematikusan így néz ki:

int *arr; void fillarr() { free(arr); //ha ezt a sort ki kommentezem, akkor nincs hiba, viszont akkor szivárog a memória arr = (int *)malloc(size); ... } void getarr() { ... } void main(void) { fillarr(); getarr(); }
Előre is köszönöm a segítséget!
Mutasd a teljes hozzászólást!
Ami még okozhatja a problémát:
1. Multithread a programod és a tömb nincs lock-olva amikor írod/olvasod azt.
2. Túlléped a neki lefoglalt memóriát (olyan helyre írsz, ahová nem szabadna).
3. Hmmm, szerintem a size változód azt tartalmazza, hogy hány int-nek akarsz helyet.
Ha igen, akkor így kellene csináld:

arr = (int *)malloc(size * sizeof(int));
Szóval a malloc paramétere azt mondja meg, hogy mennyi bájtot foglaljon le.
Más ötletem most nincs.
Mutasd a teljes hozzászólást!

Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd