我试图使用指针来编写一段简单的c代码,但是内存被意外地覆盖了。
我想创建一个指向整数的指针数组,然后创建一个指向整数的指针,并将其地址分配给一个数组。
因此,数组将指向一个指向整数的指针。我在一个名为add_value_to_array()
的函数中做到了这一点。
下面是我的代码:
void add_value_to_array(int *** array, int * value) {
*array = &value;
}
int main() {
int ** arr = { 0 };
int value = 5;
int * value_ptr = &value;
add_value_to_array(&arr, value_ptr);
//arr = &value_ptr;
printf("looool\n");
printf("looool\n");
printf("looool\n");
printf("looool\n");
printf("%p\n", arr[0]);
}
我想要的是:
arr -> value_ptr -> 5
(arr = &value_ptr
*array = value_ptr
value_ptr = &value
*value_ptr = 5
**arr = 5)
然而,这是我在调用add_value_to_array()
之后立即得到的,但是当我调用printfs()
时,内存被覆盖了,我在arr
变量中得到了无用的值。
更奇怪的是,如果我直接arr = &value_ptr
而不是调用add_value_to_array
,事情就会像预期的那样进行,内存也不会被printfs()
覆盖。
因此,如果我使用一个函数,或者如果我使用一个函数,或者我在它之外做事情,那么内存分配似乎是不同的。
我看到这种行为是怎么回事?
https://stackoverflow.com/questions/57036444
复制相似问题