2016-03-03 123 views
-6

问题

我有一个使用malloc初始化的array。当数组被初始化时,如果我打印出array的一个元素而不替换任何值,那么它会为我返回值-842150451 - 我假设它不会总是返回相同的值(我相信这是将地址转换为整数)。如何检查数组中的元素是否为地址?

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

例如:

if(array[0] == address) Then 
array[0] = 5; //Replaces the value of the address with a random integer. 

else 
array[0] *= 3; // Otherwise, if the element at index 0 is not an address, then multiply the number by an arbitrary integer. 

这是可能的吗?

+3

不,这是不可能的。一点也不。 –

+4

malloc不会初始化分配的内存。通过访问内存获得的所有内容都是垃圾。你看到的'-842150451'是一些随机值。你的意思是什么? –

+0

我可以检测它是否是垃圾?如果它是垃圾,那么改变它的值? – Baleroc

回答

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; 
} 
0

我使用malloc数组初始化。

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

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

没有,因为你可能无法读取未初始化的内存,为表达

(array[0] == address) 

一样。如果代码确实会引起未定义的行为。

相关问题