簡體   English   中英

如何檢查文件指針是否有效?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM