程序在打印字符串矢量时崩溃

Program crashes at printing string vector

本文关键字:崩溃 字符串 打印 程序      更新时间:2023-10-16

我正在制作一个写入和读取"提醒"的程序,当我打印带有"提醒"的字符串向量时,它会崩溃,我不知道为什么会发生这种情况,它可以编译,但它在运行时崩溃,感谢任何试图提供帮助的人。代码如下:

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;
}

这是一个问题:

LPSTR buffer;
GetCurrentDirectory(MAX_PATH, buffer);

LPSTRchar *的typedef,或类似的东西。但是,GetCurrentDirectory函数希望传递已分配的缓冲区。更改为:

char buffer[MAX_PATH+1];   // or TCHAR
GetCurrentDirectory(sizeof buffer, buffer);

另外,您不应该打电话给free(buffer),因为您没有malloc它。

我相信free(ent);free(dir);也是错误,因为这些函数将指针返回到由运行时库管理的内存中。 一般来说,只对你错误的事情调用free,或者函数的文档告诉你你需要free