0

関数からポインターを返すための次の構文は正しいですか?

bmpfile_t*
bmp_create_from_file(const char *filename, bmpfile_t *bmp)
{
    FILE *fp;

    fp = fopen(filename, "r");
    bmp_get_header_from_file(fp, bmp);
    bmp_get_dib_from_file(fp, bmp);
    bmp_get_pixels_from_file(fp, bmp);
    fclose(fp);

    return &bmp;
}
4

1 に答える 1

4

bmpすでに typebmpfile_t *を持っています。これはあなたが返したいものです。だからただreturn bmp

編集:現在返そうとしているもの&bmpは、のアドレスであるため、ポインターへのポインターであるbmpfile_t *タイプを持っています。bmpfile_t **さらに、他の人が指摘したように、関数のローカルスタック変数である&bmpのアドレスになります。bmpこれは、関数から戻るときにポップされるため、そのポインターは役に立たないものを指します。したがって、間違った型で何かを返すだけでなく、危険なものも返します。だからただreturn bmp

于 2013-06-28T21:48:32.577 に答える