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