我怎么知道我正在读取的内存地址在 C++ 中是否为空?

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

所以在嵌入式系统上,我正在读取一些整数并将其写入闪存。我可以用这个功能阅读它:

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 'ÿ'

有办法找出来吗?

如果您的数组是一个指针数组,您可以通过将其与 {nullptr} 进行比较来查看,否则,除非您将所有初始索引初始化为相同的值,然后检查该值是否还是老样子

您需要先定义 "empty",因为您正在使用 uint32_t。一个好的 ide 是使用 value 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;
};

然后你可以检查是否设置了空位,但负的部分是你丢失了一个完整的位。