2011-09-03 65 views
1

嗨,大家好我想要調試在C++中使用NetBeans這個應用程序(運行它給我跑關閉它失敗後)它給了我一個信號錯誤在這一點上什麼是NetBeans的C++信號Debuggning

* C =(char)任意數字;

任意數目爲1-7

它告訴我抓到的信號SIGSEGV整數?有信號錯誤?

是什麼

代碼寫一些東西,它是這樣的

void clean_up(Dot &myDot, Uint32 &bg) { 
    SDL_FreeSurface(DotS); 

    ofstream f(SAVE_FILE_PATH, ios::binary | ios::out); 

    f.clear(); 

// char *buffer; 

// buffer[0] = *(char*)(&myDot.get_location().x + 0); 
// buffer[1] = *(char*)(&myDot.get_location().x + 1); 
// buffer[2] = *(char*)(&myDot.get_location().x + 2); 
// buffer[3] = *(char*)(&myDot.get_location().x + 3); 
// buffer[4] = *(char*)(&myDot.get_location().y + 0); 
// buffer[5] = *(char*)(&myDot.get_location().y + 1); 
// buffer[6] = *(char*)(&myDot.get_location().y + 2); 
// buffer[7] = *(char*)(&myDot.get_location().y + 3); 

    f.write((char*)&myDot.get_location().x, sizeof(myDot.get_location().x)); 

    f.write((char*)&myDot.get_location().y, sizeof(myDot.get_location().y)); 

    char *c; 

    if (bg == C0) 
     *c = (char)1; 
    else if (bg == C1) 
     *c = (char)2; 
    else if (bg == C2) 
     *c = (char)3; 
    else if (bg == C3) 
     *c = (char)4; 
    else if (bg == C4) 
     *c = (char)5; 
    else if (bg == C5) 
     *c = (char)6; 
    else if (bg == C6) 
     *c = (char)7; 

    f.write(c, 1); 

    f.close(); 

    SDL_Quit(); 
} 

,並請誰能告訴我,爲什麼在評論部分給了我一個信號,一個二進制文件太

回答

1

您尚未將內存分配給c。它是一個指向一些隨機位置的指針(或者NULL,這取決於內存如何被初始化)。然後您嘗試寫入它。

它真的需要是指針嗎?你可以只使用char c;,然後使用c = (char)1;等。然後你想改變你的fwrite調用f.write(&c, 1);(或使用fputc)。

編輯:你的代碼的註釋掉的部分看起來像它有相同的基礎問題。您尚未爲緩衝區分配任何內存。如果這個例子是最重要的,那麼你只有8個項目,然後聲明它爲char buffer[8]而不是指針。

+0

非常感謝!猜猜看,整個程序運行良好。再次感謝 –