Okay jeg sidder midt i et projekt og kan se dead-line nærme sig.
Jeg har et 2 dimensionelt array i en struct, som skal indeholde 10.000 stregkoder.
struct DB {
char* kode_db[10000]; //Absolut MAX }database;
Når jeg vil tilskrive en værdi til et array f.eks. 0 gør jeg det såldedes :
strcpy(kode_db[i],ny_streg_kode); //eks. vs. 1238965<-
Når jeg afslutter programmet kommer den med de velkendte 3 ord - NULL pointer assignment.
Er der nogen hér, som kan hjælpe mig hurrtigt .. Gode point i sigte.. Nok ikke fordi det er så svært, men jeg sidder med håret i postkassen hvis jeg ikke får løst denne opgave inden til dead-line.
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
tror ikke man kan bruge en vector fra STL da der arbejdes med c struct. Har selv haft problemer med at arbejde med structure når man blander med c++ kode.
=>morten2 Du skriver \"Hvis ny_streg_kode er temporer eller på anden måde bliver deallokeret senere bliver strengen i kode_db illegal\". Jeg tror ikke mickni33\'s mening er (håber ikke) at kopiere ny_streg_kode\'s adresse ind i arrayet, men blot forestiller sig at ny_streg_kode er defineret som en char-array og ikke en pointer. Måske mickni33 vil kommentere?
Null pointer assignment, får du fordi dit char* array ikke har fået tildelt nogen memory endnu. Hvis du ikke kan (eller vil !) tildele fast plads til de 10000 stregkoder fra starten af, skal du sørge for at alle pointere har værdien NULL til at begynde med, og så allokere hukommelse til dem efterhånden som du får brug for det:
#include <string.h> const int TRUE = 1; const int FALSE = 0; const int maxBarcodes = 10000; int nbrBarcodes; char *barCodes[maxBarcodes];
for (nbrBarcodes 0; nbrBarcodes < maxBarCodes; idx++) barCodes[idx] = NULL; nbrBarCodes = 0; : : int storeBarCode(char *newBarCode) { if (++nbrBarcodes > maxBarcodes) { // Skriv en fejl og hop ud. return FALSE; }; barCodes[nbrBarcodes] = (char *)malloc(strlen(newBarCode)+1); strncpy(barCodes[nbrBarcodes], newBarcode, strlen(newBarcode)+1); return TRUE; } // : : // Når programmet er færdigt. for (idx = nbrBarcodes - 1; idx >= 0; idx--) if (barCodes[idx] != NULL) free(barCodes[idx]); :
soepro: Hvofor allokere mem i forvejen når man blot kan bruge strdup? I gør det langt mere besværligt end nødvendigt. strdup allokere memory samt kopiere strengen. Mere skal der ikke til.
//Allokér en stor mem chunck lpszBuffer = (LPSTR)LocalAlloc(LPTR, 10000*STREGKODE_LEN);
//Fordel mem ud på de 10000 pointers for (int x=0; x<10000; x++) lpszKode[x] = lpszBuffer + STREGKODE_LEN*x;
//Brug dem lstrcpy(lpszKode[8], \"2378428\"); //osv.
//Frigør mem igen LocalFree((HLOCAL)lpszBuffer);
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.