C libusb-分段故障:11

C libusb-分段故障:11,c,segmentation-fault,usb,libusb,libusb-1.0,C,Segmentation Fault,Usb,Libusb,Libusb 1.0,我有一个非常基本的最小libusb示例,它可以编译,但输出由以下应用程序生成: #include <stdio.h> #include <stdlib.h> #include <libusb-1.0/libusb.h> int main(void) { puts("Looking for USB devices..."); libusb_device **devices; libusb_context *context = NULL

我有一个非常基本的最小libusb示例,它可以编译,但输出由以下应用程序生成:

#include <stdio.h>
#include <stdlib.h>
#include <libusb-1.0/libusb.h>

int main(void) {
    puts("Looking for USB devices...");

    libusb_device **devices;
    libusb_context *context = NULL;

    ssize_t device_count = 0;

    device_count = libusb_get_device_list(context, &devices);
    if(device_count < 0) {
        puts("Unable to retrieve USB device list!");
    }

    printf("%lu devices found\n", device_count);

    return EXIT_SUCCESS;
}
故障发生在第13行:

device\u count=libusb\u get\u device\u列表(上下文和设备)

我在Mac OS X 10.9上运行上述操作,并通过自制程序安装了libusb版本1.0.9


知道问题出在哪里吗?

代码没有初始化
上下文

在libusb上执行任何操作之前调用

在向libusb发出任何其他调用之前,请添加如下行:

 int result = libusb_init(&context); 
 if (0 > result)
 {
   fprintf(stderr, "libusb_init() failed with %d.\n", result);
   exit(EXIT_FAILURE);
 }

您应该初始化该上下文。可能是
上下文
需要指向某些内存,而不是
NULL
。查看函数
libusb\u get\u device\u list
的代码/文档,下面是一个示例,其中=NULL对于上下文来说是足够的初始化。但是一定要仔细研究一下。…。@josef.van.niekerk:是的,但是这个示例还显示
libusb\u init()
首先在上下文中调用。太棒了,修复了!谢谢你的快速回答!
 int result = libusb_init(&context); 
 if (0 > result)
 {
   fprintf(stderr, "libusb_init() failed with %d.\n", result);
   exit(EXIT_FAILURE);
 }