abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
eParkomat, startup z ČR, postoupil mezi finalisty evropského akcelerátoru ChallengeUp!
Robot na pivo mu otevřel dveře k opravdovému byznysu
Internet věcí: Propojený svět? Už se to blíží...
dnes 16:00 | Nová verze

Byla vydána verze 0.98 svobodného nelineárního video editoru Pitivi. Z novinek lze zmínit například přizpůsobitelné klávesové zkratky. Videoukázka práce s nejnovější verzí Pitivi na YouTube.

Ladislav Hagara | Komentářů: 0
dnes 15:00 | Zajímavý software

Stop motion je technika animace, při níž je reálný objekt mezi jednotlivými snímky ručně upravován a posouván o malé úseky, tak aby po spojení vyvolala animace dojem spojitosti. Jaký software lze pro stop motion použít na Linuxu? Článek na OMG! Ubuntu! představuje Heron Animation. Ten bohužel podporuje pouze webové kamery. Podpora digitálních zrcadlovek je začleněna například v programu qStopMotion.

Ladislav Hagara | Komentářů: 1
včera 21:21 | Nová verze Ladislav Hagara | Komentářů: 0
včera 11:44 | Zajímavý projekt

Na Indiegogo byla spuštěna kampaň na podporu herní mini konzole a multimediálního centra RetroEngine Sigma od Doyodo. Předobjednat ji lze již od 49 dolarů. Požadovaná částka 20 000 dolarů byla překonána již 6 krát. Majitelé mini konzole si budou moci zahrát hry pro Atari VCS 2600, Sega Genesis nebo NES. Předinstalováno bude multimediální centrum Kodi.

Ladislav Hagara | Komentářů: 2
včera 00:10 | Nová verze

Byla vydána verze 4.7 redakčního systému WordPress. Kódové označením Vaughan bylo vybráno na počest americké jazzové zpěvačky Sarah "Sassy" Vaughan. Z novinek lze zmínit například novou výchozí šablonu Twenty Seventeen, náhledy pdf souborů nebo WordPress REST API.

Ladislav Hagara | Komentářů: 4
6.12. 12:00 | Zajímavý projekt

Projekt Termbox umožňuje vyzkoušet si linuxové distribuce Ubuntu, Debian, Fedora, CentOS a Arch Linux ve webovém prohlížeči. Řešení je postaveno na projektu HyperContainer. Podrobnosti v často kladených dotazech (FAQ). Zdrojové kódy jsou k dispozici na GitHubu [reddit].

Ladislav Hagara | Komentářů: 27
6.12. 11:00 | Bezpečnostní upozornění

Byly zveřejněny informace o bezpečnostní chybě CVE-2016-8655 v Linuxu zneužitelné k lokální eskalaci práv. Chyba se dostala do linuxového jádra v srpnu 2011. V upstreamu byla opravena minulý týden [Hacker News].

Ladislav Hagara | Komentářů: 2
5.12. 22:00 | Komunita

Přibližně před měsícem bylo oznámeno, že linuxová distribuce SUSE Linux Enterprise Server (SLES) běží nově také Raspberry Pi 3 (dokumentace). Obraz verze 12 SP2 pro Raspberry Pi 3 je ke stažení zdarma. Pro registrované jsou po dobu jednoho roku zdarma také aktualizace. Dnes bylo oznámeno, že pro Raspberry Pi 3 je k dispozici také nové openSUSE Leap 42.2 (zprávička). K dispozici je hned několik obrazů.

Ladislav Hagara | Komentářů: 6
5.12. 06:00 | Zajímavý software

OMG! Ubuntu! představuje emulátor terminálu Hyper (GitHub) postavený na webových technologiích (HTML, CSS a JavaScript). V diskusi k článku je zmíněn podobný emulátor terminálu Black Screen. Hyper i Black Screen používají framework Electron, stejně jako editor Atom nebo vývojové prostředí Visual Studio Code.

Ladislav Hagara | Komentářů: 50
5.12. 06:00 | Zajímavý článek

I letos vychází řada ajťáckých adventních kalendářů. QEMU Advent Calendar 2016 přináší každý den nový obraz disku pro QEMU. Programátoři se mohou potrápit při řešení úloh z kalendáře Advent of Code 2016. Kalendáře Perl Advent Calendar 2016 a Perl 6 Advent Calendar přinášejí každý den zajímavé informace o programovacím jazyce Perl. Stranou nezůstává ani programovací jazyk Go.

Ladislav Hagara | Komentářů: 10
Kolik máte dat ve svém domovském adresáři na svém primárním osobním počítači?
 (32%)
 (24%)
 (29%)
 (7%)
 (5%)
 (3%)
Celkem 797 hlasů
 Komentářů: 50, poslední 29.11. 15:50
Rozcestník
Reklama

Dotaz: C++ - Segmentation fault pri tvoreni array s velkosťou premenna

25.10.2010 11:22 PeterS. | skóre: 10
C++ - Segmentation fault pri tvoreni array s velkosťou premenna
Přečteno: 371×

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:


Odpovědi

25.10.2010 11:54 Jan Trávníček | skóre: 10 | blog: ehonza | Existuje
Rozbalit Rozbalit vše Re: C++ - Segmentation fault pri tvoreni array s velkosťou premenna
Pokud se nepletu tak velikost staticky definovaného pole musí být konstantní výraz. Jako řešení jedině použít malloc.
To mess up a Linux box, you need to work at it; to mess up your Windows box, you just have to work on it.
25.10.2010 12:02 trekker.dk | skóre: 71
Rozbalit Rozbalit vše Re: C++ - Segmentation fault pri tvoreni array s velkosťou premenna
Nepleteš se
Quando omni flunkus moritati
25.10.2010 12:18 PeterS. | skóre: 10
Rozbalit Rozbalit vše Re: C++ - Segmentation fault pri tvoreni array s velkosťou premenna
k dynamickemu alokovaniu pamäte som ešte nedošiel, ale podľa manualu by to mohlo byť takto?

image_ar = new float [img_size[0]*img_size[1]][4];

áno?
Saljack avatar 25.10.2010 12:52 Saljack | skóre: 28 | blog: Saljack | Praha
Rozbalit Rozbalit vše Re: C++ - Segmentation fault pri tvoreni array s velkosťou premenna
Ano tohle by mělo fungovat.
Sex, Drugs & Rock´n Roll.
25.10.2010 14:39 PeterS. | skóre: 10
Rozbalit Rozbalit vše Re: C++ - Segmentation fault pri tvoreni array s velkosťou premenna

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?

25.10.2010 15:24 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: C++ - Segmentation fault pri tvoreni array s velkosťou premenna
  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.

25.10.2010 15:36 PeterS. | skóre: 10
Rozbalit Rozbalit vše Re: C++ - Segmentation fault pri tvoreni array s velkosťou premenna
super, toto funguje...

no ja sa učim a zaroven prepisujem program z pythonu, pri akej štrukture skončim je vo hviezdach...

a celá ta array bude využitá, momentálne tie "vrstvy" planujem použiť na RGB hodnoty a celkový jas daného pixelu....
Řešení 1× (Michy)
25.10.2010 12:37 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: C++ - Segmentation fault pri tvoreni array s velkosťou premenna
V C99 to lze, normu C++ jsem nezkoumal, ale gcc to přeloží i s -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.
Michy avatar 25.10.2010 13:00 Michy | skóre: 11 | Praha
Rozbalit Rozbalit vše Re: C++ - Segmentation fault pri tvoreni array s velkosťou premenna
Je to skutečně tak, staticky alokované pole je příliš velké, nevejde se do zásobníku, proto padá při spuštění na segmentation fault. Při dynamické alokaci, pomocí new, se vytváří v heapu a tam se obvykle vejde. Obecně je vhodné se vyhnout alokacím velkého množství paměti v zásobníku, protože jeho velikost je omezená zpravidla na jednotky MB.
25.10.2010 13:04 Ivan
Rozbalit Rozbalit vše Re: C++ - Segmentation fault pri tvoreni array s velkosťou premenna
Tohle je pripad kdy C++ neni nadmnozinou C. V C++ opravdu pole musi mit znamou velikost. G++ to sezere, MSVC ne. Muzes bud pouzit malloc a naalokovat to na heapu anebo alloc a naalokovat to na stacku. S tim stackem muzes ale narazit na max. velikost zasobniku, hlavne u vice vlaknove aplikace. Velikost zasobniku na linuxu je defaultne 8MB, za timhle prostorem a jedna zamcena stranka a za ni zacina stack dalsiho vlakna(pokud existuje).
25.10.2010 13:16 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: C++ - Segmentation fault pri tvoreni array s velkosťou premenna
Ono ani na těch 8 MB není dobré moc spoléhat. U multithreadových aplikací běžně používám 512 KB, ale už jsem byl nucen jít i na 128 KB.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.