Portál AbcLinuxu, 10. května 2025 04:31
Ahoj,
takže mam niečo takéto:
int img_size[6] ; //tu uložim veľkosť obrazku
img_size[0] = srcimg.width; // = 1414
img_size[1] = srcimg.height; // = 1060
float image_ar [img_size[0]*img_size[1]][4];
skompiluje to ale pri spustení hodí "Chyba segmentacie..."
Ak to tak dam číslo, teda
float image_ar [3145728][4];
tak ten array vytvorí. V čom by to mohlo byť?
Řešení dotazu:
Doplnujúca otázka:
urobil som niečo takéto:
float * image_ar;
int ar_size = img_size[0]*img_size[1]*4; //pomocná premenna, lebo v nasl riadku nechcelo brať vzorec ???
image_ar = new float [ar_size];
toto skompilovalo aj zbehlo bez problémov, "new" by malo hodiť výnimku keby neprebehlo, pokiaľ viem...
lenže ja nechcem jednorozmernú array ale dvoj alebo trojrozmernú... čo s tým?
float (*image_ar)[4]; image_ar = new float[img_size[0]*img_size[1]][4]; ... delete [] image_ar;
Případně si rozmyslete, jestli by z těch čtyř floatů nebylo rozumnější udělat strukturu nebo třídu.
-std=c++98
, takže ani tam asi nebude problém. Problém je s velikostí toho pole - s hodnotami, které uvádí tazatel, se nemá šanci vejít na zásobník (a nevejde se tam ani s tou konstantou, kterou uvádí v dotazu). Pokud ale šířku a výšku dám např. 100, program se spustí a správně funguje. Takže řešením nakonec opravdu je dynamická alokace, i když z trochu jiného důvodu.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.