Hi!
Ich habe ein paar Probleme mit doppelten Pointern. Ich benutze sie das erste Mal und komme irgendwie auf keinen grünen Ast.
Ich habe folgende Strukturen definiert:
Im Prinzip möchte ich in den Strukturen einen Pointer auf ein "Array" von Pointern haben, damit ich zur Laufzeit beliebig viele Elemente speichern kann. "map_pid_to_arrayidx" dient dazu von einer ID auf den Array Index zu kommen. Dadurch muss ich "nur" für jede mögliche ID Speicher für einen Integer reservieren anstatt für die gesamte Struktur, die ich schlussendlich speichern will.
Jetzt möchte mit folgendem Code ein neues Element im "Pointer-Array" in "LastPackagesById" erstellen:
In der markierten Zeile erhalte ich dann den angegeben Fehler. Nur leider sehe ich meinen Fehler nicht, der zu dem Speicherfehler führt. Ich hoffe ihr könnt mir helfen, ist wahrscheinlich ein Anfänger-Fehler .... Ich hoffe ich bin das nicht komplett falsch angegangen ... ^^
schonmal vielen Dank für eure Hilfe
nambot
Ich habe ein paar Probleme mit doppelten Pointern. Ich benutze sie das erste Mal und komme irgendwie auf keinen grünen Ast.
Ich habe folgende Strukturen definiert:
Code:
typedef struct {
u_int8_t dummy;
} TransportPacket;
typedef struct {
TransportPacket **tpps;
u_int64_t allocated_length;
u_int64_t used_length;
} TransportPacketArray;
typedef struct {
TransportPacketArray **arr_tpp;
u_int16_t allocated_length;
u_int16_t used_length;
int32_t map_pid_to_arrayidx[USHRT_MAX];
} LastPackagesByPid;
Jetzt möchte mit folgendem Code ein neues Element im "Pointer-Array" in "LastPackagesById" erstellen:
Code:
void add_pid_package(TransportPacket *tpp, LastPackagesByPid *lpidp) {
// manage memory if TransportPacketArray for this pid does not already exists
if(pid_array_exists(tpp->pid, lpidp) == -1) {
// initialize with malloc
if(lpidp->allocated_length == 0) {
lpidp->arr_tpp = malloc(3 * sizeof(TransportPacketArray));
lpidp->allocated_length = 3;
// resize with realloc
} else if(lpidp->allocated_length <= lpidp->used_length) {
lpidp->arr_tpp = realloc(lpidp->arr_tpp, (lpidp->allocated_length + 3) * sizeof(TransportPacketArray));
lpidp->allocated_length += 3;
}
if(lpidp->arr_tpp == NULL) {
printf("error allocating memory.\r\n");
}
TransportPacketArray *curr_tpp_arr = lpidp->arr_tpp[lpidp->used_length];
// init new TransportPacketArray with some default values
// and here occurs the ERROR
curr_tpp_arr->allocated_length = 0; // <- Error "EXC_BAD_ACCESS"
curr_tpp_arr->used_length = 0;
// update our mapping array
lpidp->map_pid_to_arrayidx[tpp->pid] = lpidp->used_length;
lpidp->used_length++;
}
// ....
}
schonmal vielen Dank für eure Hilfe
nambot