[英]How do I check if a file pointer is valid?
我在 FILE * 上使用 fseek 和 fread,如下所示:
void CAudioDataItem::finalizeItem_ReadEncodedBytesWithoutDecoding(FILE* uFile, CLog* uLog, double& uTimeReadEncodedBytes)
{
//t.start();
fseek(uFile, iFirstByteToRead, SEEK_SET);
fread(&m_EncodedBytes[0], sizeof(unsigned char), m_lLenEncodedBytes, uFile);
//t.stop();
然而,它不起作用,字節都為0。
我懷疑在我的應用程序中的某個地方,FILE 指針變得無效或者該指針出現其他問題。
我如何檢查此文件句柄是否仍然有效且“可用”?
這是一個截圖:
這是它仍然有效的情況的屏幕截圖。 可以看出, _Placeholder
是不同的。 這個_Placeholder
是什么意思?
如果問題是關於 C++ 的,如其中一個標簽所暗示的那樣,
通常沒有辦法判斷指針是否懸垂,即指向 memory 不再包含指針應該指向的 object。
來自Effective Modern C++ ,在第 4 章 - 智能指針的介紹中,第 117 頁。
如果它在 C 上,那么從評論中我們知道同樣的觀點適用於 C。
關於_Placeholder=0x00000000
當它不起作用時與_Placeholder=0x1bc715bf
當它起作用時,我不確定為什么數字(我相信是 memory 地址)是你看到的那些; 也許_Placeholder=0x00000000
意味着程序中的某些內容已將指針設置為nullptr
,但關鍵是一旦發生這種情況(或其他使指針無效的事情),您將無法執行任何操作來查詢它。
go 關於此的唯一方法是接受程序存在導致未定義行為的錯誤的證據並嘗試調試它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.