In c /questions/tagged/c你不能通过引用传递变量,array
您在函数内部分配的变量最初包含与传递的指针相同的地址,但它是它的副本,因此修改它不会改变传递的指针。
您需要传递指针的地址才能更改它,如下所示
// Change the pointer of the array
void change(int **array, int length)
{
*array = malloc(length * sizeof(int));
if (*array == NULL)
return;
for (int i = 0 ; i < length ; i++)
(*array)[i] = 1;
}
Then in main()
你不能分配给一个数组,通过这种函数这样做肯定是未定义的行为。中定义的数组main()
是在堆栈上分配的,并且您不能将任何内容分配给数组,因为它们是non-可写lvalues所以你不能让它指向通过获得的堆内存位置malloc()
,你需要传递这样的指针
int *array;
change(&array, length);
free(array);
如果您希望该函数替换以前的数组,则必须free()
the malloc()
编辑数据(请注意,通过NULL
to free()
是明确定义的), so
// Change the pointer of the array
void change(int **array, int length)
{
free(*array);
*array = malloc(length * sizeof(int));
if (*array == NULL)
return;
for (int i = 0 ; i < length ; i++)
(*array)[i] = 1;
}
then in main()
int *array;
array = NULL;
change(&array, length);
change(&array, length);
change(&array, length);
change(&array, length);
free(array);
会做你显然想做的事。