【发布时间】:2017-01-01 20:13:48
【问题描述】:
我是编程新手,我正在尝试编写一个从列表中获取最短字符串的函数,但每次运行它时,Visual Studio 都会显示错误“抛出异常:读取访问冲突”。哪里错了?
#include <iostream>
#include <string>
using namespace std;
const string &shortest_string(initializer_list<string> strings) {
string *shortest_one = nullptr;
for (string string : strings) {
if (shortest_one == nullptr) shortest_one = &string;
else {
if (string.size() < shortest_one->size()) shortest_one = &string;
}
}
return *shortest_one;
}
int main() {
cout << shortest_string({ "hello" , "my", "name", "is", "dan" }) << endl;
return 0;
}
【问题讨论】:
-
因为
string string : ...创建了一个临时变量,该变量在一个循环周期中存在并在下一个周期被销毁。你正在获取它的指针(指向释放的内存) -
if (shortest_one = nullptr)- 你觉得这有什么作用? -
既然您已经问了第二个不同的问题,我们什么时候才能看到展示行为的真实代码?
标签: c++ string function pointers initializer-list