这个问题旨在作为常见问题的规范副本使用:
我正在函数内动态分配数据,一切都运行正常,但只限于分配发生的函数内部。当我尝试在函数外部使用相同的数据时,程序会崩溃或出现其他意外的程序行为。
这里有一个MCVE:。
每当从
这是什么原因?
我正在函数内动态分配数据,一切都运行正常,但只限于分配发生的函数内部。当我尝试在函数外部使用相同的数据时,程序会崩溃或出现其他意外的程序行为。
这里有一个MCVE:。
#include <stdlib.h>
#include <stdio.h>
void create_array (int* data, int size)
{
data = malloc(sizeof(*data) * size);
for(int i=0; i<size; i++)
{
data[i] = i;
}
print_array(data, size);
}
void print_array (int* data, int size)
{
for(int i=0; i<size; i++)
{
printf("%d ", data[i]);
}
printf("\n");
}
int main (void)
{
int* data;
const int size = 5;
create_array(data, size);
print_array(data, size); // crash here
free(data);
}
每当从
create_array
函数内部调用print_array
时,我得到了期望的输出0 1 2 3 4
,但是当我从main
中调用它时,程序崩溃了。这是什么原因?