第二种读取方法中的EXC_BAD_ACCESS(代码= 1,地址= 0x68)

时间:2018-04-04 17:25:48

标签: c++ xcode scanf fopen

我对使用Xcode for c ++相对较新。

我的问题如下:

我正在尝试使用fopen读取两个txt文件,我为此制作了两种不同的方法(在示例代码中我只有一种方法可以保持简短)两种读取文件的方法完美分离,即当我测试它们时在主要的单独,他们从文件中完美地读取数据。但是,如果我在main中一起调用这两个方法,则异常" EXC_BAD_ACCESS(code = 1,address = 0x68)"在读取第二个txt文件时抛出。因此,打开和读取多个文件似乎是不可能的。我的代码看起来像这样:

#include <iostream>
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <string>
#include <time.h>
#include <assert.h>
#include <vector>
#include <iterator>
#include <algorithm>
#include <numeric>
#include <sstream>
#include <vector>

float fl[10];

void readfile(std::string s){
    strcat(filename, s.c_str());
    input = fopen(filename, "r");
    for (int i == 0; i < 10; i++){
       fscanf(input, "%f\t", fl[i]);
    }
    fclose(input);
}

以下主要作品

int main(int argc, const char * argv[]) {
    std::string s1 = "Input1"; 
    readfile(s1);
    return 0;
}

在这个主程序中,异常将在方法readfile(s2)中抛出。

int main(int argc, const char * argv[]) {
    std::string s1 = "Input1.txt"; 
    std::string s2 = "Input2.txt";
    readfile(s1);
    readfile(s2);
    return 0;
}

txt文件input1和input2包含10个浮点数,每个浮点数用制表符分隔。

在fscanf行抛出异常。有没有人知道问题可能是什么?

2 个答案:

答案 0 :(得分:0)

找到答案。应该使用'strcpy'而不是'strcat'。感谢帮助和建议!

答案 1 :(得分:0)

您永远不会初始化i

for (int i == 0; i < 10; i++){

应该是:

for (int i = 0; i < 10; i++){

i可能包含垃圾,导致您取消引用内存的随机位并使您无法访问。