2012-03-04 1 views
-2

Я знаю, что не все использовали API PortAudio, но, возможно, вы все равно можете найти его здесь.Где ошибка сегментации?

#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; 
} 

* EDIT: * извините ребята, я не знаю, что даже был отладчик. Я не пытался быть грубым или невнимательным. Он сказал, что это вызвано линиями 12 и 13, теми, которые начинаются с std :: cout. Я не понимаю, в чем проблема.

+6

Вы предпочитаете использовать людей в качестве отладчиков? –

+1

Ну, ** вы ** можете сказать ** нам **, где seg-fault, запустив это в отладчике, который скажет вам, какая строка вызвала его. –

+0

Возможно ли, когда вы пытаетесь написать указатель 'outputDeviceInfo', который вы ранее объявили' const'? – rjz

ответ

2

Null указатель разыменования. 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

0

От the documentation:

const PaDeviceInfo* Pa_GetDeviceInfo ( PaDeviceIndex device )

Получить указатель на PaDeviceInfo структуру, содержащую информацию об указанном устройстве.

Возвращает: Указатель неизменного PaDeviceInfo структуры. Если параметр устройства выходит за пределы диапазона, функция возвращает NULL.

Вы забыли проверить за NULL перед разыменованием указателя. К сожалению.

 Смежные вопросы

  • Нет связанных вопросов^_^