0

さて、私はプロジェクトに取り組んでいて、この問題に遭遇しました。プログラムを実行すると、次のメッセージが表示されます。

Unhandled exception at 0x76fa15de in programmingproj.exe: 0xC0000005: Access violation reading location 0x00000000.

Visual Studioがエラーであると言うコードは次のとおりです。

float **LoadImg(const char *filename)
{
    float **data = { 0 };
    char *buf = new char[32];
    std::string buf2;

    std::ifstream filebuf(filename);

    filebuf.getline(buf, 32);

    // Reiterate over each pixel, very inefficient, needs to be fixed.
    for (int x = 0; x < (IMAGE_SIZE_X - 1); x++)
    {
        for (int y = 0; y < (IMAGE_SIZE_Y - 1); y++)
        {
            filebuf.getline(buf, 32);

            // Only copy the values.
            for (int i = 8; i < 32; i++)
            {
                if (buf[i] != '\t' && buf[i] != ' ')
                {
                    buf2 += buf[i];
                }
            }

            // Set the pixel's value.
            data[x][y] = (float)strtodbl(buf2);
        }
    }

    filebuf.close();

    return data;
}

これが私が読もうとしているフォーマットのサンプルです:

x   y       Value
1   1           0
1   2           0
1   3           0
1   4           0
1   5      10.159
1   6       5.225
1   7       1.337
1   8           0
1   9           0
1   10          0

値フィールドを適切なピクセル (x, y) にロードするだけです。

strtodbl 関数は、私が atof や strtod を置き換えるために書いた簡単なものです。

編集: IMAGE_SIZE_X と IMAGE_SIZE_Y は、画像のサイズ (97x56) の単なる定数です。

4

1 に答える 1

4

dataポインターへのポインターとして宣言し、使用してdataいますが、スペースを割り当てておらずdata、それを指すように設定していません。data指し示すはずのものを読み書きする前に、それを行う必要があります。

于 2013-06-21T17:01:08.523 に答える