我遇到了这个问题,我不断收到错误的访问警告。我看到这通常会超出数组范围,但在这种情况下,当我有条件subscript >= 0 && subscript < size
时,我看不出这是怎么回事。
我已经玩了一点程序,我似乎无法找到解决办法。我将粘贴几个代码块,我认为问题可能来自哪里,如果你们可以看一看,也许可以指出我的方向很好!
头文件。
class ArrayClass{
friend ArrayClass operator +( const ArrayClass &, const ArrayClass & );
friend ArrayClass operator +( const ArrayClass &, const float );
friend ostream & operator << ( ostream &, const ArrayClass & );
friend istream & operator >> ( istream &, ArrayClass &);
private:
float *floatArray;
int size;
public:
ArrayClass(){ init(); }
ArrayClass(int s = 0){
init();
size = s;
floatArray = new float[size];
}
void init();
ArrayClass( const ArrayClass& );
void operator=( const ArrayClass& );
~ArrayClass();
const int operator [] ( int ) const;
// Various other methods. Output, getter/setter, etc.
}
源文件。 (可能的原因)
const int ArrayClass::operator [] (int subscript) const{
if(subscript >= 0 && subscript < size)
return floatArray[ subscript ];
return 0;
}
ArrayClass operator +( const ArrayClass& arr1, const ArrayClass& arr2){
ArrayClass temp_arr(arr1.size);
for (int i = 0; i < arr1.size; i++){
temp_arr.floatArray[i] = arr1[i] + arr2[i];
}
return temp_arr;
}
ostream& operator << ( ostream & out, const ArrayClass &arr ){
for (int i = 0; i < arr.size; i++)
out << arr.floatArray[i];
return out;
}
ArrayClass:: ArrayClass(const ArrayClass& that){
// Initialize state
init();
// Assigns input to self
*this = that;
}
void ArrayClass::operator=(const ArrayClass& that){
if (this != &that){
// Copy static varibles
floatArray = that.floatArray;
size = that.size;
// Deletes existing memory
if (floatArray)delete [] floatArray;
// Allocate memory for object
if(size)
floatArray = new float[size];
else
floatArray = NULL;
// Copy dynamic memory
for(int i = 0; i < size; ++i)
floatArray[i] = that.floatArray[i];
}
}
ArrayClass:: ~ArrayClass(){
if (floatArray) delete [] floatArray; //malloc: *** error for object
}
然后在主要内容中,我只需输入数组大小,添加result = arr1 + arr2;
并打印cout<< result;
更新: 好的,所以我把这些评论记在心里并重新编写了很多这些并提出了一些更新的代码,但现在我得到了一个新的苹果错误(指针被释放没有分配)。我知道这被标记为重复,但我认为问题已经转移到一个稍微如此,如果你可以采取另一种看起来非常有帮助。 旁注:如果我注释掉析构函数,我会得到正确的结果,但是想要把它放在那里。