0

我在尝试从 C++ 中读取文本文件时遇到此异常。

Windows 在 myprogram.exe 中触发了一个断点。

这可能是由于堆损坏,这表明 myprogram.exe 或其已加载的任何 DLL 中存在错误。

这也可能是由于用户在 myprogram.exe 获得焦点时按 F12。

输出窗口可能有更多诊断信息。

文本文件包含我想保存在双数组中的数字,这是我的代码:

double* breakLine(char arr[])
{
    double* row_data = new double[FILE_ROW_PARAMS];
    int j= 0, m= 0,k= 0;
    char str[FILE_ROW_SIZE]; 
    while(arr[j] != '\0')//not end of line
    {
        if(arr[j] == ' ')//significant data
        {
            str[k] = '\0';
            row_data[m++] = atoi(str);
            k = 0;
        }
        else if(arr[j]!=' ')
        {
            str[k++] = arr[j];
            if(arr[j+1] == '\0')
            {
                str[k] = '\0';
                row_data[m] = atoi(str);
            }
        }
        j++;
    }
    return row_data;
}

double* readFile(char fileName[],int* num,double* params)
{
    int size= SIZE, number_of_lines= 0;
    double* points = new double[SIZE * FILE_ROW_PARAMS];
    char arr[128];
    ifstream infile;
    infile.open(fileName);
    if(!infile) 
    {
        cout<<"NO FILE!";
        return NULL;
    }
    else
    {
        for(int i=0; i < NUMPARAM; i++) //get first params
        {
            infile >> params[i];
            size--;
        }
        infile.getline(arr,128);
        while(!infile.eof())
        {
            infile.getline(arr,128);
            double* a = breakLine(arr);
            for(int i=0; i < FILE_ROW_PARAMS; i++)
            {
                *(points+number_of_lines*FILE_ROW_PARAMS+i) = *(a+i);
            }
            number_of_lines++;
            size--;
            if(size == 0)
            {
                size = SIZE;
                points = (double*)realloc(points, number_of_lines + SIZE * FILE_ROW_PARAMS);
            }
        }
        infile.close();
        *num  = number_of_lines;
        return points;
    }
}
4

1 回答 1

0

我不完全确定您的文本文件的结构。但是您没有利用 C++ 库。这是一个代码示例,它逐行从文本文件中读取数字并将它们推送到双精度向量中。它还会按您的原样计算行数。我注意到您正在读取整数(您正在使用 转换输入atoi()),所以我的示例也是如此。在此示例中,我忽略了您从文件中读取的初始参数。

#include <fstream>
#include <string>
#include <vector>
#include <sstream>

int main()
{
    std::ifstream infile("c:\\temp\\numbers.txt");
    std::vector<double> result;
    std::string line;
    int lines = 0;
    while (std::getline(infile, line))
    {
        ++lines;
        std::stringstream instream(line);
        std::copy(std::istream_iterator<int>(instream), std::istream_iterator<int>(), std::back_inserter(result));
    }

    return 0;
}
于 2013-11-03T17:50:57.567 回答