读取文件时堆坏了

时间:2016-01-31 13:38:23

标签: c++ visual-studio ifstream ofstream

Visual Studio在重新编译程序的最开始时报告可能的堆损坏。这篇文章的作用是读取.txt文件以提供可供选择的字符串列表。

for循环顺利进行,直到程序终止并抛出错误结束。

我还提供所有调用的函数(如有必要)。

int main() {
title_board(NULL,NULL,NULL, NULL);

// settings file
open_file(DEFAULT_SETTING);
bool generate_mistake_log=read_bool(16);
bool show_instructions=read_bool(10);
int pass_threshold=read_int(13);
t_direction trans_dir=read_t_dir(7);

int sett_lines=lines_count(DEFAULT_SETTING);
int library_verse=sett_lines-LIB_START_VERSE;
string *file_library=new string[library_verse];
for (int i=0; i<sett_lines; i++) {
    file_library[i]=read_string(i+LIB_START_VERSE);
    cout << i+1 << ". " << file_library[i] << endl;
}
string FILE_NAME;
cout << "\nFILE INDEX: ";
int file_ind;
while (!(cin >> file_ind)) {
    cout << "MISMATCH IN FILE INDEX: ";
    reset_cin();
}

功能 lines_count read_string

string read_string(int verse) {
open_file(DEFAULT_SETTING);
// it just opens a file, works fine
string temp_var;
for (int i=0; i<verse; i++)
    getline(WordsFileInput, temp_var);
close_files();
return temp_var; }

int lines_count(string file_name) {
open_file(file_name);
int a=0;
string * temp_str = new string;
while (getline(WordsFileInput, *temp_str))
    ++a;
close_files();
return a; }

This is the output right before the error

这又是我的.txt文件的样子。

  

LEGEND:

     

1 =目标 - &gt;母亲

     

2 =母亲 - &gt;目标

     

3 =随机

     

变量:

     

VAR NAME:translation_direction

     

1

     

VAR NAME:show_instructions

     

     

VAR NAME:pass_threshold [%]

     

75

     

VAR NAME:generate_mistake_log

     

     

文件库:

     

文件/ dates.txt

     

文件/ isis.txt

     

文件/ music.txt

     

文件/ farm.txt

     

文件/ feminist.txt

     

文件/ food.txt

此致

1 个答案:

答案 0 :(得分:1)

int library_verse=sett_lines-LIB_START_VERSE;
string *file_library=new string[library_verse];

您刚刚分配了file_library数组。 file_library数组的大小为sett_lines减去LIB_START_VERSE,无论它是什么。这两行代码说的是什么。您没有显示LIB_START_VERSE设置的内容,但它很可能是某个正数,大于零。这一切的结果是数组的大小LIB_START_VERSE小于sett_lines值。

for (int i=0; i<sett_lines; i++) {
    file_library[i]=read_string(i+LIB_START_VERSE);

...然后您立即开始初始化sett_lines数组中的第一个file_library经文条目。

您应该能够自己解决代码中的其余错误。