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

时间:2014-03-30 19:59:30

标签: c++

我正在创建一个编写和读取“提醒”的程序,当我打印带有“提醒”的字符串向量时,它崩溃了,我不知道为什么会发生这种情况,它可以编译,但它在跑步时崩溃,感谢任何试图帮助的人。这是代码:

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

1 个答案:

答案 0 :(得分:1)

这是一个问题:

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);都是错误,因为这些函数会将指针返回到由运行时库管理的内存中。一般情况下,只能对您使用malloc的内容发送free,或者该功能的文档告诉您需要free