Mohl by mi nekdo objasnit, co presne znamena SDL chyba #245 "Segmentation Fault (Parachute Deployed)"? Dik
Fórum › C / C++
Parachute deployed
No tak se trosicku vic rozepisu.. Mam loader 3DS souboru; ani ne "originalnich" z 3DS Maxu, ale vyexportovanych z Cinema 4D.. Ja mam ovsem Blender, ktery je exportuje zase trosicku jinak.. Ja jsem napsal jen nepatrnou cast, takze se v tom nevyznam az zas tak, jak bych chtel, ale tohle mi prijde absolutne jasne a nechapu, proc mi to proboha hazi chybu.
/******************************************************
*
* takze mam strukturu "chunk"
*
* 3ds soubor se sklada z bloku; kazdy ma na
* zacatku "ID" bloku, svoji delku a potom
* samotna data
*
******************************************************/
struct tChunk
{
unsigned short int ID; // id bloku
uint length; // delka
uint bytesRead; // pocet jiz prectenych bytu
};
/******************************************************
*
* rekurzivni funkce, ktera postupne prochazi bloky
*
******************************************************/
uint version;
// alokujeme misto pro dva nove bloky
tChunk *current_chunk = new tChunk;
tChunk *temp_chunk = new tChunk;
// nacte novy blok
//
// prvni dva byty ulozi do ID
// nasledujici 4 jsou delka bloku
// tedy 6 bytu v bytesRead
read_chunk(current_chunk);
switch(current_chunk->ID){
...
case OBJECTINFO:
{
read_chunk(temp_chunk); //opet 6 bytu v bytesRead
temp_chunk->bytesRead += fread(&version, 1, temp_chunk->length - temp_chunk->bytesRead, fr); // pricte asi 87 bytu
// tady to spadne
// dokonce i jen pri pokusu vytisknout jednu z tech promennych
// zatimco s modelem z Cinema 4D to v pohode bezi dal...
m_CurrentChunk->bytesRead += m_TempChunk->bytesRead;
...
// nacte blok
void read_chunk(tChunk *r_chunk)
{
r_chunk->bytesRead = fread(&r_chunk->ID, 1, 2, fr);
r_chunk->bytesRead += fread(&r_chunk->length, 1, 4, fr);
}
Takze tohle vypada v poradku taky, ale ted jsem si vsiml, tohoto:
temp_chunk->bytesRead += fread(&version, 1, temp_chunk->length - temp_chunk->bytesRead, fr); // pricte asi 87 bytu
Nepricita to trochu moc? Pkud je uint nekde definovan jako
typedef unsigned int uint;
Tak i na 64bitovem procesoru, to vice jak 8B(64b) byt nemuze. Takze navrhuji to cteni zmenit na:
temp_chunk->bytesRead += fread(&version, 1, sizeof(uint), fr);
Haa, mam to! Unsigned in je v rozsahu cca. 0-65000, pritom do "version" se uklada asi "1 024 000" (u modelu z Cinema 4d jen asi "3").. Celou dobu jsem se zameroval na to bytesRead, protoze to zdanlive padalo az pri tom nasledujicim pricitani.. Ale ze me to trvalo den! Dik ;-)
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Java EE - The modul has not been deployed — založil santa58
Moderátoři diskuze