我正在尝试从文本文件中加载数据,如下所示:
161,77,88,255 0,44,33,11,111
等。我有操作它的功能,并确保数组的大小正确(可能仍然有所不同)。以下是我的实施尝试:
bool loadData(int **imgPix, string fileName) {
ifstream inputFile;
inputFile.open(fileName.c_str());
string tempLineRow; //The resulting line from the text file
string tempElementColumn; //The individual integer element
int numberOfCols = 0;
int numberOfRows = 0;
if (!inputFile.is_open()) {
return false;
}
imgPix = new int* [numberOfRows];
while (getline(inputFile, tempLineRow, '\n')) {
stringstream ss;
ss << tempLineRow; //Stringstream version of the line
while (getline(ss, tempElementColumn, ',' )) {
stringstream ss2;
ss2 << tempElementColumn;
ss2 >> numberOfCols;
//Prob? (**imgPix) = *(*(imgPix + numberOfRows) + numberOfCols);
numberOfCols++;
}
numberOfRows++;
}
inputFile.close();
return true;
}
我用带有注释的双指针赋值标记了这一行,因为我认为它是我错误的来源,尽管可能还有其他人。我不确定如何使用我实现的while循环结构迭代更新2D数组。
有人可以提供任何帮助吗?非常感谢!
答案 0 :(得分:0)
你的代码有几个问题,我猜是因为你没有完全理解内置数组在C ++中是如何工作的。这里的主要问题是那些不能轻易动态增长,这些阵列没有“调整大小”操作(但这里你需要一个)。因此,我建议您尝试使用std::vector<int>
和std::vector< std::vector<int> >
重写代码,确保在存储新行或列时使用.resize
然后返回并再次询问遇到这个新实施的问题。
答案 1 :(得分:0)
imgPix = new int* [numberOfRows]
这里numberOfRows = 0,所以你没有分配足够的内存。在分配内存之前,您需要知道数组的大小。 然后你还应该为数组中的每一行分配一个内存:
imgPix[currentRow] = new int [TotalCols];
对于二维矩形数组,创建TotalRows * TotalCols元素的一维数组会更有效,然后使用公式A(row, col) = A[row*TotalCols + col]
访问它。
答案 2 :(得分:0)
以前的答案是有效的,但如果不要求连续的内存,std::deque
在这种情况下可能是比std::vector
更好的选择,以避免大量的内存重新分配。