文件访问中的分段错误

时间:2012-01-14 14:35:34

标签: c file segmentation-fault

我可以问一下为什么这段代码会导致分段错误。我正试图从文本文件中获取输入,但我无法弄清楚问题是什么。

using namespace std; 
using namespace cv;

int main()
{
    char str[50];
    FILE *trainfile;
    int k, n, maxval1, maxval2, classnum;
    char dataArray[n][3];

    trainfile = fopen("training.txt", "r+");

    if(trainfile == NULL){
        perror("Cannot open file.\n");
    }else{
        while(!feof(trainfile)){
            fscanf(trainfile, "%s", str);       
        }
    }
    fclose(trainfile);

    return 0;
}

2 个答案:

答案 0 :(得分:3)

int k, n, maxval1, maxval2, classnum;
char dataArray[n][3];

n未初始化,因此它可以是任何值,因此您的代码具有未定义行为

错误......反正它没用过。

代码中的另一个问题是数据缓冲区:

char str[50];

应该足够大以容纳文件的内容,这可能不是,并导致未定义的行为

答案 1 :(得分:0)

一个问题是你的缓冲区可能不够大。

您应首先获取文件的大小,然后创建该大小的动态缓冲区,最后读取该文件。

fseek(trainfile,0,SEEK_END); //Go to end
int size = ftell(trainfile); //Tell offset of end from beginning
char* buffer = malloc(size); //Make a buffer of the right size

fseek(ftrainfile,0,SEEK_SET); //Rewind the file

//Read file here with buffer