我如何知道我正在读取的内存地址是否为空C++?

How can I know if the memory address I'm reading from is empty or not in C++?

本文关键字:是否 C++ 地址 何知道 读取 内存      更新时间:2023-10-16

所以在嵌入式系统上,我正在读取一些整数并将其写入闪存。我可以使用此函数读取它:

read(uint32_t *buffer, uint32_t num_words){
    uint32_t startAddress = FLASH_SECTOR_7;
    for(uint32_t i = 0; i < num_words; i++){
        buffer[i] = *(uint32_t *)(startAddress + (i*4));
    }
}

然后

uint32_t buf[10];
read(buf,10);

我怎么知道buff[5]是否为空(上面有任何东西)?

现在在空的物品上,我得到这样的东西165 '¥'或这个255 'ÿ'

有没有办法找出答案?

首先需要定义"空",因为你使用的是uint32_t。一个好的 ide 是使用值0xFFFFFFFF(4294967295十进制)作为空值,但您需要确保此值不用于其他事情。然后你可以测试是否if ( buf [ 5 ] == 0xFFFFFFFF ).

但是,如果您使用整个uint32_t范围,则无法检测它是否为空。

另一种方法是使用结构,并定义一个空位。

struct uint31_t
{
    uint32_t empty : 0x01; // If set, then uint31_t.value is empty
    uint32_t value : 0x1F;
};

然后你可以检查空位是否被设置,但不利的部分是你损失了整整一个位。

如果你的数组是一个指针数组,你可以通过与{nullptr}进行比较来检查,否则,除非你把所有的初始索引初始化为相同的值,然后检查值是否仍然相同,否则你不能。