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

时间:2015-06-11 15:27:07

标签: c++ buffer flash-memory

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

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

的内容

有没有办法找到它?

2 个答案:

答案 0 :(得分:3)

您需要先定义“空”,因为您使用的是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;
};

然后你可以检查空位是否设置,但负面部分是你丢失了一点。

答案 1 :(得分:1)

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