#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函数部分。这是编译器错误吗?
答案 0 :(得分:0)
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;