【发布时间】:2016-12-30 10:02:01
【问题描述】:
我有一个简单的程序,它试图将二维数据读入堆分配的浮点数组。程序如下。
#include <iostream>
#include <fstream>
void read_file(std::ifstream &inFile, float **arr, unsigned m, unsigned n)
{
for(unsigned i = 0; i < m; ++i) {
for(unsigned j = 0; j < n; ++j) {
inFile >> arr[i][j];
std::cout << arr[i][j];
}
std::cout << std::endl;
}
}
int main() {
const unsigned m = 20;
const unsigned n = 1660;
float **A = new float *[m]; // alloc pointers to rows 1,...,m
for(unsigned row = 0; row < m; row++) A[row] = new float [n]; // alloc columns for each row pointer
std::ifstream inFile("data.dat");
read_file(inFile, A, m, n);
// DEALLOC MEMORY
for(unsigned row = 0; row < m; row++) delete [] A[row]; // dealloc columns for each row pointer
delete [] A; // dealloc row pointers
return EXIT_SUCCESS;
}
数据是一个包含 0-1 个条目的表格(参见此处:data),它很好地面向行,有 20 行和 1660 列。我将打印添加到 read_file 函数中以查看出现了什么问题,它只打印零,但至少打印正确的数量(20*1660 个零)。
数据似乎是制表符分隔的;这是问题还是我的方法完全无效?
【问题讨论】:
-
有趣的是你如何包含
vector而你却不使用它! -
我从
vector开始,但后来我尝试了解new关键字。 -
这里有一个很好的C++ books 列表。我建议你看看它。对于 2D 数组,使用向量的向量。
-
你应该检查文件是否存在。