动态内存访问仅在函数内部工作。此问题用于此常见问题的标准复制:我在一个函数中动态地分配数据,所有事情都运行良好,但只在分配发生的函数中。当我试图在函数之外使用相同的数据时,会出现崩溃或其他意外的程序行为。这里有一个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);}什么时候都行print_array从内部调用create_array函数,我得到了预期的输出。0 1 2 3 4,但当我从main我的程序崩溃了。原因是什么?
1 回答
莫回无
TA贡献1865条经验 获得超7个赞
data
create_array
malloc
void func (int x){ x = 1; printf("%d", x);}...int a;func(a);printf("%d", a); // bad, undefined behavior - the program might crash or print garbage
a
x
x
a
a
data
data
malloc
create_array
int* create_array (int size){ int* data = malloc(sizeof(*data) * size); for(int i=0; i<size; i++) { data[i] = i; } print_array(data, size); return data;}int main (void){ int* data; const int size = 5; data = create_array(size); print_array(data, size);}
void create_array (int** data, int size){ int* tmp = malloc(sizeof(*tmp) * size); for(int i=0; i<size; i++) { tmp[i] = i; } *data = tmp; print_array(*data, size);}int main (void){ int* data; const int size = 5; create_array(&data, size); print_array(data, size);}
- 1 回答
- 0 关注
- 315 浏览
添加回答
举报
0/150
提交
取消