在C++中通过类函数访问动态分配的数组是否有限制?



这是我为一个类编写的程序的开始,我试图让它读取包含许多浮点数的文件。使用双打应该不是问题。我假设使用 array1.readDataFromFile(( 调用我的函数; 将访问 array1 结构中动态创建的数组?然而,当

这是头文件

// Specification file for the NuberArrayClass
//a.k.a NumberArrayClass.h file
#ifndef NUMBERARRAYCLASS_H
#define NUMBERARRAYCLASS_H
using namespace std;
// class declaration
class NumberArrayClass
{
private:
int arraySize;
double * numberArray = nullptr;
public:
//constructor declaration
NumberArrayClass();
//member functions
void readDataFromFile();
void displayArray();
//destructor
~NumberArrayClass()
{
delete[] numberArray;
} // end of destructor

};
#endif // NUMBERARRAYCLASS_H

这是类函数文件

//NumberArrayClass.cpp file
#include "NumberArrayClass.h" //needed to access arry
#include <iostream>
#include <fstream> //needed for file read
using namespace std;


NumberArrayClass::NumberArrayClass()
{
arraySize = 250;  
numberArray = new double[arraySize];
}

void NumberArrayClass::readDataFromFile()
{
//creating a read object and opening file.
ifstream inFile;
inFile.open("DoubleData.txt");
int countIt = 0; //this is a counter
if (!inFile.fail())
{
cout << "File open!" << endl;
//this should populate the
while (countIt < arraySize && inFile >> numberArray[countIt]);
{
countIt++; //incramenting counter. 
}
}
else
{
cout << "File Read fail!" << endl;
}//end of if/else statement.

}//end of readDataFromFile

void NumberArrayClass::displayArray()
{
for (int i = 0; i < arraySize; i++)
{
cout << numberArray[i] << endl;
}
}//end of displayArray

这是我的主要

//main .cpp file
#include <iostream>
#include "NumberArrayClass.h"
using namespace std;
int main()
{
//creating our class object.
NumberArrayClass array1;
array1.readDataFromFile();
array1.displayArray();
system("pause");
return 0;
}

我不确定如果我的语法错误还是什么..文件打开,但array1.displayArray((吐出垃圾。

检查此行:

while (... && inFile >> numberArray[countIt]);

operator>>不会返回操作的成功,而是返回与其操作相同的ifstream(因此您可以进行链式调用(:

拆分条件和分配,并在分配后检查 eofbit 以了解您是否到达了文件的末尾。您可能还想查看badbitfailbit

关于您的标题问题Is there a limit on accessing dynamically allocated arrays through class functions in C++?:您的 SO 和硬件规定了一个实际限制,但如果这不是这里发生的事情。如果您遇到此类问题,它将在以下行中:

numberArray = new double[arraySize];

(旁注,如果你决定从这个类派生,你的析构函数应该是virtual的(

我在这里看到了一个问题。 假设浮点数/双精度数小于arraySize。这意味着 while 循环将在countIt到达arraySize之前终止。 但是,您的显示函数循环遍历数组的整个arraySize元素。 由于数组在分配后未初始化,这意味着这些元素包含垃圾。

我的建议是执行以下操作:

  1. 分配后初始化数组。
  2. 仅显示读取函数读取的多个元素。

最新更新