【发布时间】:2014-03-31 04:28:02
【问题描述】:
我正在编写一个编写和读取“提醒”的程序,当我打印一个带有“提醒”的字符串向量时,它崩溃了,我不知道为什么会发生这种情况,它可以编译,但是它运行时崩溃,感谢任何试图提供帮助的人。代码如下:
vector<string> v = ReadFile();
for(vector<string>::iterator i = v.begin();i != end();i++) {
cout << *i << '\n' << endl;
}
代码的另一个“版本”,也会崩溃:
vector<string> v = ReadFile();
for(int i = 0;i < v.size();i++) {
cout << v[i] << '\n' << endl;
}
对不起,如果退出另一个有同样问题的线程。
PS:我使用 MinGW 作为编译器
完整代码在这里:
#include <iostream> // Basic IO
#include <fstream> // File IO
#include <stdlib.h> // free()
#include <vector> // For using vectors
#include <string> // For strings
#include <dirent.h> // Read files from folders
#include <windows.h> // GetCurrentDirectory()
void WriteFile(string desc) {
ofstream write(desc.c_str());
write << "Created on: " << __DATE__ << " " << __TIME__ << "\n";
write.close();
printf("\nReminder saved with success");
}
vector<string> ReadFile () {
vector<string> reminders;
DIR *dir;
struct dirent *ent;
LPSTR buffer;
GetCurrentDirectory(MAX_PATH, buffer);
if((dir = opendir(buffer)) != NULL) {
while((ent = readdir(dir)) != NULL) {
reminders.push_back(ent->d_name);
}
closedir(dir);
free(dir);
free(ent);
free(buffer);
} else {
printf("\nError at reading folder or empty folder");
}
return reminders;
}
int main() {
vector<string> v = ReadFile();
for(int i = 0;i < v.size();++i) {
cout << v[i] << '\n' << endl;
}
return 0;
}
【问题讨论】:
-
您上面的代码看起来是正确的,其他地方可能有问题可能是 ReadFile().... 您应该检查程序中的其他函数。
-
不确定是不是拼写错误,但您的意思是
v.end()?或者这可能是你的问题?另外,建议将i++更改为++i,因为大多数迭代器更普遍地支持这种方法。不过,我认为这不是你的问题,因为vector<t>::iterator支持两者。 -
好吧,当我只创建向量时,它运行良好(ReadFile() 工作正常),但是当我打印时会导致崩溃。当我在第一个代码中使用 ++i 而不是 i++ 时,编译器给了我一个很长的错误(我可以看到错误的开始),在第二个代码中它崩溃了。 ://
-
提供一个完整的、可编译的示例来演示该问题。仅仅因为在添加特定代码之前问题不会出现,并不意味着刚刚添加的代码就是问题。
-
@DJPeterson 所有迭代器都支持两种形式的 ++。 ++i 可能比 i++ 更高效,具体取决于编译器。
标签: c++