基于外部文件的 C++ 数组

C++ Array based on external file

我的问题比较简单(至少对我来说是这样)。假设我有一个文件 'test.txt' 包含 9 行这样的数字:

8 4
1.2 2.3
3.4 4.5
2.8 2.1
3.1 9.4
1.2 2.3
3.4 4.5
2.8 2.1
3.1 9.4

第一个数字 (8) 告诉我第一行后面有多少行浮点数,另一个 (4) 是进一步计算所需的数字。然后我们有一个包含点坐标的 table 8x2。现在我尝试编写一个简单的函数,它(一旦调用)将根据外部文件的内容创建我的数据。

这是我的代码:

// Function to display matrix
void showMatrix(float *matrix, int size)
{
    for (int x = 0; x < size; x++) {
        printf("%5f ",*matrix);
        matrix++;
    }
    matrix -= size;
    printf("\n");
}

// Function to upload single file
void loadInputFile(std::string file_name, float* data_X, float* data_Y, int& data_size, int& centre_interval) {

    // Open text file
    std::ifstream dataFile;     
    dataFile.open(file_name.c_str());
    if (!dataFile.good())
     return;

    // First line contains data size and another number:
    dataFile >> data_size >> centre_interval;
    printf("Loading data...\nLoaded values: dataSize = %d, centreInterval = %d\n", data_size, centre_interval);

    // Create data tables under specified pointers:
    data_X = new float[data_size];
    data_Y = new float[data_size];
    printf("Created table of size %d\n", data_size);

    for (int i = 0; i < data_size; i++) {
        dataFile >> data_X[i] >> data_Y[i];
    }

    // No error - loaded correctly
    showMatrix(data_X, data_size);

    // Close file
    dataFile.close();
}


int main(int argn, char ** argc) {

    // I want it to be filled by my function
    float* dataX;
    float* dataY;
    int dataSize;
    int centreInterval;

    // My file name existing in the same path
    std::string filename = "test.txt";

    // Calling my function
    loadInputFile(input_names[i], dataX, dataY, dataSize, centreInterval);

    // Loaded correctly
    printf("Data load results:\n dataSize = %d,    centreInterval = %d\n", dataSize, centreInterval);

    // Error :/
    showMatrix(dataX, dataSize);

    return 0;
}

我能够将这些数据正确地存储在我的函数中,但是我将它传递到外部的方式似乎有误。非常感谢指出我的错误。

您正在 dataXdataY 参数 按值 传递,这意味着它们是 复制的 和在函数内部,您只为本地副本而不是原始副本分配内存。

将函数更改为

void loadInputFile(std::string file_name, float*& data_X, float*& data_Y, int& data_size, int& centre_interval)