我正在尝试在函数中返回字符串数组并打印其变量。我知道没有办法在c ++中实际返回数组,但是可以传递其指针。因此,我设置了函数以返回指针值,然后从那里打印出来,但是指针不起作用。我收到一个例外,它无法访问阅读位置。
Exception thrown at 0x7AD2F3BE (ucrtbased.dll) in BankApp__.exe: 0xC0000005: Access violation reading location 0xCCCCCCCC.
我正在使用Visual Studio,因此在使用调试器时,我看到它无法读取该指针处的内容。
string * User::getPersonal() {
string arr[] = { FirstName, LastName, Address, Birthday };
return arr;
}
int main()
User testUser1, testUser2;
testUser1.createLogin("wman", "password", "Wil", "Man", "333 3 Street", "09-03-1997");
testUser2.createLogin("johndoe", "password", "John", "Doe", "123 ABC St.", "12-01-1990");
User users[] = { testUser1, testUser2 };
for (int i = 0; i < sizeof(users) / sizeof(users[0]); i++) {
string * infoArray = users[i].getPersonal();
//cout << *infoArray << endl;
//cout << infoArray << endl;
for (int i = 0; i < 4; i++) {
string fields[] = { "First Name", "Last Name", "Address", "Birthday"};
cout << fields[i] << ": " << *(infoArray + i) << endl;
}
cout << "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" << endl;
}
}
getPersonal()
返回包含User
所有数据的字符串数组指针。然后我想遍历元素并打印出来。有更好的方法吗?
答案 0 :(得分:2)
您正在尝试返回一个指向本地(堆栈分配的)数组的指针,该数组在函数返回并且返回的指针始终悬空时会被破坏。
您可以改用std::vector
或std::array
。例如
std::vector<string> User::getPersonal() {
std::vector<string> arr = { FirstName, LastName, Address, Birthday };
return arr;
}