0

我有一个具有私有数组和指针的类。我有 3 个构造函数,一个是复制构造函数,另一个将指向数组的指针作为参数。我正在重载运算符,例如 << ,ostream。当我将指向静态数组的指针传递给我的类时,我的程序工作正常。但是当我开始使用动态数组时,我的函数操作很奇怪并输出了一些疯狂的数据。我应该在程序中做出什么改变,以便操作员可以同时使用静态和动态数组?我有一个单独的函数来创建动态数组 random() 并返回我作为参数传递的指针。这是我的代码

4

2 回答 2

0

假设ptr是类中的成员HugeInteger,您有几个未定义行为的情况。

在默认构造函数的情况下,您ptr指向一个本地数组。与所有局部变量一样,该数组的作用域仅在其声明的函数中。所以当默认构造函数返回时,成员变量ptr是“悬空的”。

在复制构造函数的情况下,您不分配ptr可以指向的内存。因此,在索引它时,您正在索引一个未定义的内存位置。


至于您的问题,它与默认构造函数基本相同。您分配pointer指向本地数组arr。当函数返回时,数组不再存在,所以指针指向未使用的内存,而那个内存可能已经被其他函数使用了。此外,您在那里所做的不是创建一个动态数组,这将涉及使用new.

于 2013-10-17T17:08:59.477 回答
0

int * pointer;
int arr[40]={0};
pointer = arr;

指针将是一个 40 字节的数组。该数组不是动态分配的,将在函数结束时完全删除。将您的功能更改为:

int* random()
{
    int * pointer = new int[40];
    cout << "Random function: ";
    for(int j = 0; j < 40; j++){
        pointer[j] = rand()%10; cout << pointer[j];
    }
    cout << endl;
    return pointer;
}

这样,您将保留指针的值,并且可以在其他函数中使用它们。

于 2013-10-17T17:20:09.763 回答