我正在创建一个编写和读取“提醒”的程序,当我打印带有“提醒”的字符串向量时,它崩溃了,我不知道为什么会发生这种情况,它可以编译,但它在跑步时崩溃,感谢任何试图帮助的人。这是代码:
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;
}
答案 0 :(得分:1)
这是一个问题:
LPSTR buffer;
GetCurrentDirectory(MAX_PATH, buffer);
LPSTR
是char *
的typedef,或者类似的东西。但是,GetCurrentDirectory
函数需要传递已分配的缓冲区。改为:
char buffer[MAX_PATH+1]; // or TCHAR
GetCurrentDirectory(sizeof buffer, buffer);
另外,您不应该致电free(buffer)
,因为您没有malloc
。
我相信free(ent);
和free(dir);
都是错误,因为这些函数会将指针返回到由运行时库管理的内存中。一般情况下,只能对您使用malloc的内容发送free
,或者该功能的文档告诉您需要free
。