我使用onLoadConfig
初始化array
。当初始化该数组时,如果我打印出malloc
的元素而没有替换任何值,那么它为我返回值array
- 我假设它不会总是返回相同的值(我相信这是转换为整数的地址。
我希望能够检查数组的索引是否是一个地址。如果是这样,我希望能够用整数替换该值,或者将其乘以。
-842150451
这可能吗?
答案 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)
一样。如果代码确实存在,则会引发未定义的行为。