Hello stackoverflow 所以我的问题是:我想创建一个函数来生成结构数组,但每当我完成插入值时我会得到一个错误是什么问题? 像这样
struct INFO
{
char name[20]; // creating the strucure
int age;
};
void generateArr(INFO *p); // a function to generate the array
void readArr(INFO *p); // a function to read the array
int main()
{
INFO *ptr =new INFO; // a pointer that points to the structure
generateArr(ptr); // calling the functions
readArr(ptr);
delete[]ptr; // deallocating memory
}
void generateArr(INFO *p)
{
p = new INFO [3]; // generating three INFO structures
}
void readArr(INFO *p)
{
for (int i = 0; i < 3; i++)
{
cin >> p[i].name>> p[i].age; // inputting the elements
cout << endl;
}
}
我试图让代码尽可能清晰,问我是否有任何含糊不清。
答案 0 :(得分:0)
此功能:
void generateArr(INFO *p)
{
p = new INFO [3]; // generating three INFO structures
}
无法正常工作。它将分配的内存分配给本地'p`参数,该参数不会返回到main。要修复它,请将p更改为引用:
void generateArr(INFO *&p)
[编辑]
但是由于您已经在ptr
的main中分配了INFO *ptr =new INFO;
,因此您将以这种方式获得内存泄漏。所以你应该删除那一行。
答案 1 :(得分:0)
在generateArr(INFO *p)
中,您分配一个数组,该地址存储在本地变量p
中;从函数返回时,任何局部变量(例如p
)都会丢失,只要分配的数组的地址。
你应该摆脱没用的函数generateArr(INFO *p)
,并以这种方式将你的数组分配到main()
:
int main()
{
INFO *ptr =new INFO[3];
readArr(ptr);
delete[]ptr; // deallocating memory
}
答案 2 :(得分:0)
至少以下列方式重写功能
INFO * generateArr( size_t n )
{
return new INFO [n]; // generating three INFO structures
}
void readArr(INFO *p, size_t n )
{
for (int i = 0; i < n; i++)
{
cin >> p[i].name>> p[i].age; // inputting the elements
cout << endl;
}
}
并且主要称他们为
const size_t N = 3;
INFO *ptr = generateArr( N ); // a pointer that points to the structure
readArr( ptr, N );
delete []ptr; // deallocating memory
关于你的代码,然后在本声明中
INFO *ptr =new INFO; // a pointer that points to the structure
只分配了一个结构类型的对象,但是使用运算符delete []
而不是运算符delete
删除它。
delete[]ptr; // deallocating memory
在这个功能里面
void generateArr(INFO *p)
{
p = new INFO [3]; // generating three INFO structures
}
存在内存泄漏,因为变量p
是函数的局部变量,该函数由函数的参数值初始化,并且在退出函数后将被销毁。结果,动态分配的内存的地址将丢失。