c + + float array dimensioner

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at tilpasse nogle funktionelle Unix c ++ til et Windows-miljø.


I den oprindelige kode er der:


float *drowPtrs[\_imageRows];


For at flytte dette til windows har jeg justeret det til:


float *drowPtrs = new float[\_imageRows];


Men senere i funktionen er der denne linje:


 float &otherDistance = drowPtrs[y][x];


Selvfølgelig har jeg lige initialiseret drowPtrs som et endimensionelt array, så det giver en fejl.


EDIT: Dette er faktisk et c ++ syntaks spørgsmål, ikke et Unix til Windows problem, som påpeget. Svaret nedenfor fungerer godt.

Bedste reference


Denne linje:


float *drowPtrs[\_imageRows];


... er ikke tilladt i standard C ++, hvis \_imageRows ikke er en kompileringstidskonstant. Dette skyldes sandsynligvis på grund af GCC Variable-Length Arrays forlængelse. [15]


Dette 'erklærer' en række markører til float af størrelse \_imageRows.


Den bedste løsning ville være at skifte til vektor:


std::vector<float*> drowPtrs(\_imageRows);


Eller bedre hvis du vil have et 2D array af float:


std::vector<std::vector<float>> drowPtrs(\_imageRows);





En alternativ løsning tildeler dette array dynamisk:


float **drowPtrs = new float*[\_imageRows];


... men du bør sætte dette ind i en unique\_ptr for at undgå at beherske hukommelsen manuelt:


std::unique\_ptr<float*[]> drowPtrs(new float*[\_imageRows]);





... eller hvis du virkelig ikke kan, så skal du slette det manuelt, når du er færdig:


delete[] drowPtrs;