x64 環境下_findnext() 函式報錯——0xC0000005: 寫入位置 0xFFFFFFFFDF47C5A0 時發生訪問衝突_x64 錯誤: 0xc0000005

钢之炼丹术师發表於2024-05-19

CSDN搬家失敗,手動匯出markdown後再匯入部落格園

最近在搞單目相機位姿估計,相機標定參考了【OpenCV3 學習筆記 】相機標定函式 calibrateCamera( ) 使用詳解(附相機標定程式和資料)提供的程式碼。

/*
@param File_Directory 為資料夾目錄
@param FileType 為需要查詢的檔案型別
@param FilesName 為存放檔名的容器
*/
void getFilesName(string &File_Directory, string &FileType, vector<string>&FilesName) {
	string buffer = File_Directory + "\\*" + FileType;
 
	_finddata_t c_file;   // 存放檔名的結構體
 
	long hFile;
	hFile = _findfirst(buffer.c_str(), &c_file);   //找第一個檔案命
 
	if (hFile == -1L)   // 檢查資料夾目錄下存在需要查詢的檔案
		printf("No %s files in current directory!\n", FileType);
	else
	{
		string fullFilePath;
		do
		{
			fullFilePath.clear();
 
			//名字
			fullFilePath = File_Directory + "\\" + c_file.name;
 
			FilesName.push_back(fullFilePath);
 
		} while (_findnext(hFile, &c_file) == 0);  //如果找到下個檔案的名字成功的話就返回0,否則返回-1 
		_findclose(hFile);
	}
}

執行到

//long hFile;
_int64 hFile;

時報錯,參考_findnext() 報錯寫入位置 0x000000000BE2A940 時發生訪問衝突。x64 環境下,控制代碼也在變化,要用_int64 定義控制代碼,而不是 long。因此修改

//long hFile;
_int64 hFile;

問題解決

相關文章