复制CImage会导致运行时错误

时间:2016-05-22 00:56:33

标签: c++ windows mfc visual-studio-2015

#include <iostream>
#include <atlimage.h>
using namespace std;
void locate(CImage img, int i, int j)
{
    img.GetPixelAddress(i, j);
};
int main()
{
    CImage img;
    img.Load(_T("./1.png"));
    locate(img, 0, 0);
    //img.GetPixelAddress(0, 0);
    unsigned char * p = (unsigned char *)(img.GetPixelAddress(0, 0));
    cout <<*p << endl;//give me a runtime error
    return 0;
}

这给了我一个运行时错误。我在windows上使用vs2015。

#include <iostream>
#include <atlimage.h>
using namespace std;
void locate(CImage img, int i, int j)
{
    img.GetPixelAddress(i, j);
};
int main()
{
    CImage img;
    img.Load(_T("./1.png"));
    //locate(img, 0, 0);
    img.GetPixelAddress(0, 0);
    unsigned char * p = (unsigned char *)(img.GetPixelAddress(0, 0));
    cout <<*p << endl;//works fine
    return 0;
}

这是编译,但它看起来与上面的代码基本相同。 我只是用实际执行的代码替换locate函数部分。这是编译器错误吗?

1 个答案:

答案 0 :(得分:0)

这是CImage::GetPixelAddress

的原型
void* GetPixelAddress(int x, int y);

它返回一个指针。如果将其强制转换为字符数组,cout将尝试打印字符串。所以只需按原样打印:

cout << img.GetPixelAddress(0, 0) << endl;
//or
void* p = img.GetPixelAddress(0, 0);
cout << p << endl;
//or
printf("%p\n", p);

或者您可以转发到INT_PTR

INT_PTR p = (INT_PTR)img.GetPixelAddress(0, 0);
cout << std::hex << p << endl;