在void getData()中,如何访问由void *指针返回的内存位置?

时间:2017-01-29 12:04:15

标签: c++

当我尝试通过getData()函数输入元素时,我得到错误分段错误(核心转储)。 我无法将元素输入数组。我无法理解为什么我无法访问void *返回到Class类型的内存位置。 * parr的大小是4个字节,我仍然无法将数据存入该内存位置???

#include<iostream>
#include<cstdlib>
using namespace std;

class Array
{
int *arr;
public:
void* operator new(size_t size)
{
    void *parr=::new int[size];
    //cout<<sizeof(parr);
    return parr;
}
void operator delete(void *parr)
{
    ::delete (int*)parr;
}
void getData()
{
    cout<<"Enter the elements";
    for(int i=0;i<5;i++)
        cin>>arr[i];
}
void showData()
{
    cout<<"Array is:\n";
    for(int i=0;i<5;i++)
        cout<<arr[i];
}

};

int main()
{
Array *A=new Array;
A->getData();
//A->showData();
(*A).showData();
delete A;
return 0;
}

1 个答案:

答案 0 :(得分:0)

您可能要做的不是为类new重载deleteArray运算符,而是编写适当的构造函数和析构函数:

class Array {
    int *arr;
public:
    Array(size_t size) : arr(new int[size]) {
    }
    ~Array() {
        delete arr;
    }
    // ...
};