Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C中创建指针数组的正确方法_C_Arrays_Libcurl_Libpng - Fatal编程技术网

在C中创建指针数组的正确方法

在C中创建指针数组的正确方法,c,arrays,libcurl,libpng,C,Arrays,Libcurl,Libpng,我在试图修改示例代码时遇到了一个问题。示例代码非常简单,它经常使用curl\u easy\u句柄从服务器获取一些.png文件。然后从libpng调用read_png_file函数来读取下载的图像 现在我正试图修改这个程序,使用curl_multi-API同时获取多个图像。我可以成功下载图像,但是当我调用read_png_文件时,它将返回一个输入错误,无法识别为png文件 原始程序接受如下输入: png_bytep input_buffer = malloc(sizeof(png_byte)*

我在试图修改示例代码时遇到了一个问题。示例代码非常简单,它经常使用curl\u easy\u句柄从服务器获取一些.png文件。然后从libpng调用read_png_file函数来读取下载的图像

现在我正试图修改这个程序,使用curl_multi-API同时获取多个图像。我可以成功下载图像,但是当我调用read_png_文件时,它将返回一个输入错误,无法识别为png文件

原始程序接受如下输入:

  png_bytep input_buffer = malloc(sizeof(png_byte)*BUF_SIZE);
  struct bufdata bd; 
  bd.buf = input_buffer;
  png_structp png_ptr;
  png_infop info_ptr;
  png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); 
然后通过以下方式调用函数:

png_bytep* row_pointers = read_png_file(png_ptr, &info_ptr, &bd);
我现在得到的是:

  png_structp png_ptr;
  png_infop info_ptr;
  png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); 
  png_bytep input_buffer[num_threads];
  struct bufdata bd[num_threads];
  for (int i=0; i<number; i++){
    input_buffer[i] = malloc(sizeof(png_byte)*BUF_SIZE);
    bd[i].buf = input_buffer[i]; 
  } 
然后在read_png_file函数中,它将在以下行失败:

  if (png_sig_cmp(bd->buf, 0, 8))
    abort_("[read_png_file] Input is not recognized as a PNG file");
所以我假设输入&bd[I]是错误的,有人知道这里出了什么问题吗?我已经验证了bd->buf和input_缓冲区的对应地址实际上是相同的


任何帮助都将不胜感激,提前感谢

澄清:是为每个.png文件调用这一行,还是为每个线程调用一次png_bytep*row_pointers=read_png_filepng_ptr,&info_ptr,&bd[i];'就连接的另一端而言,这是一个完全相同的连接,因此每个返回的项都可以/将转到不同的输入缓冲区,这取决于哪个线程控制不同的输入缓冲区。建议为要下载的每个文件生成单独的TCP连接,这样每个TCP连接都将由相应的线程处理。函数read_png_file不是标准LibPNG库的一部分。这使得重现您的问题变得很棘手-您在该函数中遇到了问题,但我们看不到该函数在做什么。在将info_ptr变量传递给函数之前,不初始化该变量;我们不可能知道它是否安全,但它是否安全还有疑问。
  if (png_sig_cmp(bd->buf, 0, 8))
    abort_("[read_png_file] Input is not recognized as a PNG file");