分段错误在哪里?

时间:2012-03-04 00:28:52

标签: c++ segmentation-fault portaudio

我知道不是每个人都使用过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开头的。我不明白这是什么问题。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

来自the documentation

  

const PaDeviceInfo* Pa_GetDeviceInfo ( PaDeviceIndex device )

     

检索指向PaDeviceInfo结构的指针,该结构包含有关指定设备的信息。

     

<强>返回:       指向不可变PaDeviceInfo结构的指针。如果设备参数超出范围,则函数返回NULL

在取消引用指针之前,您忘记检查NULL。糟糕。