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

时间:2015-02-03 04:01:58

标签: c arrays libcurl libpng

我在尝试修改示例代码时遇到了问题。示例代码非常简单,它使用curl_easy_handle不断从服务器获取一些.png文件。然后它从libpng调用read_png_file()函数来读取下载的图像。

现在我正在尝试使用curl_multi API同时获取多个图像来修改此程序。我可以成功下载图像,但是当我调用read_png_file()时,它将返回“输入未被识别为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]; 
  } 

然后我调用函数:

png_bytep* row_pointers = read_png_file(png_ptr, &info_ptr, &bd[i]);

然后在read_png_file()函数中,它将在此行失败:

  if (png_sig_cmp(bd->buf, 0, 8))
    abort_("[read_png_file] Input is not recognized as a PNG file");

所以我假设输入&amp; bd [i]错了,有谁知道这里出了什么问题?我已经确认bd-&gt; buf和input_buffer的对应地址实际上是相同的。

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

0 个答案:

没有答案