C++简单函数参数传递问题请求解答

#include
#include
using namespace std;
int main()
{
//寻找bmp文件中,文件的高和宽
FILE *file_bmp;
file_bmp=fopen("图片测试文档.bmp","rb");
if(NULL==(file_bmp))
{
return -1;
}
fseek(file_bmp,0x0012,SEEK_SET);
int *iWidth;
int *iHeight;
fread(iWidth,4,1,file_bmp);//这里有问题,应该是参数传递错误导致的
fseek(file_bmp,0x0016,SEEK_SET);
fread(iHeight,4,1,file_bmp);

/*正确结果代码
int iWidth,iHeight;
fread(&iWidth,4,1,file_bmp);//这样结果是对的,但是理论上两种方法是相同的啊
fseek(file_bmp,0x0016,SEEK_SET);
fread(&iHeight,4,1,file_bmp);
*/
return 0;

}

int *iWidth;
int *iHeight;
这两个指针未指向有效的内存地址,传参后导致程序非法读取内存

只声明指针,没有分配内存空间,写入了非法的内存地址。

int * iWidth; int * iHeight; 这个地方声明了两个指针,但是这两个指针指向的是一个随机地址,你需要手动的给他们分配内存,如下

 int * iWidth = new int();
 int * iHeight = new int();

这样 iWidth 和 iHeight 才指向了一个有效的地址空间。这样在你调用fread(&iWidth,4,1, filebmp); 才可以向这个有效的内存空间写入数据。

指针没有空间,只声明不开劈空间是野指针。

指针没有指明地址