如何检查数组中的元素是否为地址?

时间:2016-03-03 19:33:25

标签: c

问题

我使用onLoadConfig初始化array。当初始化该数组时,如果我打印出malloc的元素而没有替换任何值,那么它为我返回值array - 我假设它不会总是返回相同的值(我相信这是转换为整数的地址。

我希望能够检查数组的索引是否是一个地址。如果是这样,我希望能够用整数替换该值,或者将其乘以。

例如:

-842150451

这可能吗?

2 个答案:

答案 0 :(得分:2)

不,无法判断数组元素是否已初始化。

您可以使用calloc()代替malloc(),这会自动将所有内容初始化为0,因此您可以这样做:

if (array[0] == 0) {
    array[0] = 5;
} else {
    array[0] *= 3;
}

但如果0是数组中的有效值,则无效。

您可以使用结构数组,而不是整数数组,并在结构中放置initialized字段。

struct element {
    int initialized;
    int value;
};

分配数组后,您需要在所有元素中填入initialized字段,以显示值尚未初始化。

array = malloc(N * sizeof(struct element));
for (int i = 0; i < N; i++) {
    array[i].initialized = 0;
}

然后你可以这样做:

if (!array[0].initialized) {
    array[0].value = 5;
    array[0].initialized = 1;
} else {
    array[0].value *= 3;
}

答案 1 :(得分:0)

  

我使用malloc初始化了一个数组。

不,你没有。 malloc()不会初始化它返回地址的内存。

  

我希望能够用整数替换值,或者将其乘以。 [...]   这可能吗?

不,因为您可能没有读取未初始化的内存,因为表达式

(array[0] == address) 

一样。如果代码确实存在,则会引发未定义的行为。