libpngのpng_write_end()でSegmentation fault

libpngを使って、png画像を出力するプログラムを書いたのだが、いざ実行するとpng_write_end()関数を呼び出したところで、Segmentation faultを起こしてしまう。
test.c:

#include <stdio.h>
#include <stdlib.h>
#include <png.h>

#define PNG_SETJMP_NOT_SUPPORTED 1

int main() {
  FILE *fp = fopen("test.png", "wb");
  if (!fp) {
    fprintf(stderr, "Cannot open %s.\n", "test.png");
    return 1;
  }

  png_voidp user_error_ptr;
  png_error_ptr user_error_fn, user_warning_fn;
  png_structp png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, user_error_ptr, user_error_fn, user_warning_fn);
  if (!png_ptr) return 1;
  
  png_infop info_ptr = png_create_info_struct(png_ptr);
  if (!info_ptr) {
     png_destroy_write_struct(&png_ptr, (png_infopp)NULL);
     return 1;
  }

  png_init_io(png_ptr, fp);

  png_set_IHDR(png_ptr, info_ptr, 1, 1, 8, PNG_COLOR_TYPE_RGB_ALPHA, PNG_INTERLACE_NONE, PNG_COMPRESSION_TYPE_BASE, PNG_FILTER_TYPE_BASE);

  png_byte px[4] = {0x30, 0x20, 0x10, 0xff};
  png_byte *row_pointers[1];
  row_pointers[0] = (png_byte *) px;
  //Write the image data.
  png_write_image(png_ptr, row_pointers);

  png_write_end(png_ptr, info_ptr);

  png_destroy_write_struct(&png_ptr, &info_ptr);
  fclose(fp);
  return 0;
}


$ []gcc -Wall -lpng test.c[] []libpng-develが必要。[]
$ []./a.out[]
[]セグメンテーション違反です[]
$ []gdb ./a.out [][]どこで落ちたか調べる。[]
[]GNU gdb Fedora (6.8-11.fc9)[]
[]...省略...[]
[](gdb) b png_write_end [][]png_write_endにブレークポイントを設定[]
[]Function "png_write_end" not defined.[]
[]Make breakpoint pending on future shared library load? (y or [n]) y[]

[]Breakpoint 1 (png_write_end) pending.[]
[](gdb) run[]
[]Starting program: /home/tks/xcur2png/a.out[]
[]...省略...[]
[]Breakpoint 1, 0x00a1b6e6 in png_write_end () from /usr/lib/libpng12.so.0[]
[]Missing separate debuginfos, use: debuginfo-install glibc.i686 libpng.i386[]
[]zlib.i386[]
[](gdb) s[]
[]Single stepping until exit from function png_write_end,[]
[]which has no line number information.[]

[]Program received signal SIGSEGV, Segmentation fault.[]
[]0x00000001 in ?? ()[]
[]png_write_end()で落ちている[]
[]...省略...[]

原因がわからず二日ほど悩んだが、単にpng_write_info()の呼び忘れだった。orz
png_set_IHDR()の後に「png_write_info(png_ptr, info_ptr);」を挿入する必要がある。

pngに関して参考にしたサイト:
伝説のお茶の間 - PNGファイル(2)  PNG操作の手順
PNG Specification: Data Representation