2012-03-04 74 views
-2

我知道不是每個人都使用過PortAudio API,但也許你可以在這裏找到它。分段故障在哪裏?

#include <iostream> 
#include <math.h> 
#include "portaudio.h" 

int main() {  
    PaDeviceIndex outputDevice; 
    PaDeviceIndex deviceCount; 
    outputDevice = Pa_GetDefaultOutputDevice(); 
    deviceCount = Pa_GetDeviceCount(); 
    const PaDeviceInfo * outputDeviceInfo; 
    outputDeviceInfo = Pa_GetDeviceInfo(outputDevice); 
    std::cout << "Name of default output device: " << outputDeviceInfo->name << std::endl; 
    std::cout << "Struct version: " << outputDeviceInfo->structVersion << std::endl; 
    return 0; 
} 

* 編輯:*對不起你們,我不知道有甚至是一個調試器。我並沒有試圖粗魯或不加思索。它表示它是由第12行和第13行引起的,那些以std :: cout開頭的行。我看不出有什麼問題。

+6

你更喜歡用人作爲調試器嗎? – 2012-03-04 00:30:35

+1

好吧,**你​​*可以告訴我們** seg-fault在調試器中運行,它會告訴你哪一行產生了它。 – 2012-03-04 00:30:44

+0

您試圖寫入'outputDeviceInfo'指針,您之前聲明爲'const'的時候是否會出現這種情況? – rjz 2012-03-04 00:31:04

回答

2

空指針取消引用。 Pa_GetDeviceInfo正在返回空指針。

Program received signal SIGSEGV, Segmentation fault. 
0x080487f4 in main() at pa.cpp:12 
12  std::cout << "Name of default output device: " << outputDeviceInfo->name << std::endl; 
(gdb) print outputDeviceInfo 
$1 = (const PaDeviceInfo *) 0x0 
+0

哦,我明白了。我認爲這是因爲由於某種原因PortAudio不能識別默認的輸出設備,所以我想我必須配置它或其他東西。多謝,夥計。 – user1220165 2012-03-04 00:59:14

0

the documentation

const PaDeviceInfo* Pa_GetDeviceInfo ( PaDeviceIndex device )

檢索指向有關指定的裝置的PaDeviceInfo結構包含的信息。

返回: 指向不可變的PaDeviceInfo結構的指針。如果設備參數超出範圍,則函數返回NULL

您在提領指針之前忘了檢查NULL。哎呀。