以下函数必须为对象数据库分配内存,并指定一个指向对象数组的指针。
然后,指针将使用指针算法循环数组,并在用户输入后将每个对象初始化为正确的值。
以下代码不起作用:
//**********************************************************************
//* Get Database Records *
//**********************************************************************
record* get_records_database(int quantity)
{
record *p_database; // Pointer to the records database
record *p_record; // Pointer to each object in the database
int index = 1; // Number of objects in the database
// Allocate a database of object records
try
{
p_database = new record[quantity];
}
catch (bad_alloc xa)
{
fatal_error(ALLOC_ERR, "get_records_database",
"object records database");
}
// Loop processing object records until the database is filled
// --- //
// Test:
p_database->set_amount(400);
p_database->get_amount();
return p_database;
}
我面临的问题是在VisualStudio中修复以下编译器错误:错误C4703:使用了未初始化的本地指针变量'p_employee_database'。
这是一个项目;使用new,try,catch和pointers是必需的;该函数的结构是必需的(此时并非全部写入);指向类的指针的返回值是必需的。我的老师非常严格地严格遵守他的要求。
非常感谢任何有助于解决此错误的帮助。谢谢;)
答案 0 :(得分:2)
您的代码至少存在两个问题:
try
{
p_employee_database = new employee_bonus_record[employee_quantity];
}
catch (bad_alloc xa)
{
fatal_error(EMPLOYEE_ALLOC_ERR, "get_employee_records_database",
"employee bonus records database");
}
//.. rest of code, assuming p_employee_database is ok.
如果抛出异常,则p_employee_database
未初始化,但是您无法从函数返回。相反,你的逻辑继续使用p_employee_database
,好像没有任何错误,因此编译器警告。
即使您声明fatal_error
调用exit()
,编译器也看不到这一点。它只查看该代码块并发出警告。如果要取消警告,可以返回nullptr
。
try
{
p_employee_database = new employee_bonus_record[employee_quantity];
}
catch (const bad_alloc& xa)
{
fatal_error(EMPLOYEE_ALLOC_ERR, "get_employee_records_database",
"employee bonus records database");
return nullptr;
}
代码的第二个问题是你应该通过const引用catch
std::bad_alloc
而不是值。请参阅this article。