动态内存访问仅在函数内部工作。此问题用于此常见问题的标准复制:我在一个函数中动态地分配数据,所有事情都运行良好,但只在分配发生的函数中。当我试图在函数之外使用相同的数据时,会出现崩溃或其他意外的程序行为。这里有一个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个赞
datacreate_arraymalloc
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 garbageax
xaa
datadatamalloc
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 关注
- 358 浏览
添加回答
举报
0/150
提交
取消
