我在傳遞指向函數的指針時遇到了問題。當函數返回時,指針看起來與它在函數中的不同。C函數指針參數在函數退出時不一樣
因此,我將一個指針傳遞給獲取原始圖像數據的函數,該數據應該存儲在指針引用的內存中。
如果我然後將原始圖像函數內的指針傳遞給函數以從原始數據創建JPEG文件,那麼它可以正常工作。
如果我首先等待原始圖像函數完成,然後使用傳遞給原始圖像函數的指針調用JPEG函數,那麼它將無法創建圖像。
代碼的簡化版本低於:
int getRawImage(unsigned char *pBuffer);
int writeJPEGBFile(unsigned char *idata, char *ofile);
int main(int argc, char** argv) {
unsigned char *rawData = NULL;
char filename[MAXPATHLEN] = "/home/user/tst/img.jpg";
getRawImage(rawData);
// This does not work
writeJPEGBFile(rawData, filename);
free(rawData);
return 0;
}
int getRawImage(unsigned char *pBuffer) {
void *hDevice;
hDevice = scanOpenDevice();
// Removed code for simplification
scanGetFrame(hDevice, pBuffer, NULL)
scanCloseDevice(hDevice);
// This Works!!
//char filename[MAXPATHLEN] = "/home/user/tst/img.jpg";
//writeJPEGBFile(pBuffer, filename);
return 0;
}
int writeJPEGBFile(unsigned char *idata, char *ofile) {
// JPEG code goes here
return 0;
}
我的問題是什麼我做錯了,我怎麼能順利通過RAWDATA指針writeJPEGBFile()函數在main()函數?
的scanGetFrame(定義)如下:
typedef void *FTR_PVOID;
FTR_API_PREFIX FTR_BOOL FTR_API ftrScanGetFrame(FTRHANDLE ftrHandle, FTR_PVOID pBuffer, PFTRSCAN_FRAME_PARAMETERS pFrameParameters);
的scanGetFrame()函數來自於我與鏈接第三方庫,所以我將無法更改定義。
'scanGetFrame'如何添加數據? – juanchopanza 2014-10-08 06:50:19
你有沒有嘗試過在兩種情況下都將指針變量打印到'writeJPEGBFile'中? – Hrishi 2014-10-08 06:51:11
它看起來像'scanGetFrame'是一個宏,它需要'pBuffer'或某些類似的地址。否則,我不認爲這個工作。你可以發佈'scanGetFrame'的定義嗎? – 2014-10-08 06:51:20