我写了一个函数来为数组分配内存,并将数组长度存储在一个指针中,这样我就可以在主函数中使用这两个函数了。一切似乎都很好,直到我试图循环通过数组打印值。
当我使用数组大小指针来终止打印循环时,它表现出奇怪的行为。你能告诉我哪里出错了吗?
提前感谢:)
#include <stdio.h>
#include <stdlib.h>
void func (int** arr, int** len){
int length = 5;
*len=&length;
*arr = malloc(sizeof(int)*(**len));
for (int i=0; i<(**len); ++i){
(*arr)[i]=i*10;
}
}
int main(){
int* len = NULL;
int* arr = NULL;
func(&arr, &len);
for (int i=0; i<5; ++i){
printf("%d\n", arr[i]);
} //works
/*
for (int i=0; i<*len; ++i){
printf("%d\n", arr[i]);
} //doesnt work
*/
free(arr);
return 0;
}
3条答案
按热度按时间hiz5n14c1#
这里赋值
*len
指向一个局部变量(length
),当函数返回时,局部变量length
将超出作用域,之后取消引用指针将有未定义的行为。如果您在
main
中为int
分配内存,并将指向该内存的指针提供给func
,您将获得正确的行为。enyaitl32#
上面的代码不起作用,因为
len
的内容不确定。将
*
与不确定或NULL
指针一起使用会产生未定义的行为。*在函数
func
中,lenght
是一个局部变量,一旦函数返回,它就会被销毁。由于
lenght
在编译时是已知的,并且永远不会更改,因此不需要传递指向int
的指针,只需传递一个int
进行分配即可。4szc88ey3#
你应该已经正确地使用了指针。你传递了一个指向函数指针的指针,并且你试图向指针写入一个值。