我的类有私有数组和指针。我有3个构造函数,一个是复制构造函数,它将指向数组的指针作为参数。我正在重载运算符,例如<< ,ostream。当我将指向静态数组的指针传递给我的类时,我的程序工作正常。但是当我开始使用动态数组时,我的函数操作很奇怪并输出一些疯狂的数据。我应该在程序中做出什么样的差异,以便运算符可以同时使用静态和动态数组?我有一个单独的函数创建动态数组random()和返回指针,我作为参数传递。这是我的代码
答案 0 :(得分:0)
假设ptr
是HugeInteger
类中的成员,您有几个未定义行为的情况。
对于默认构造函数,您使ptr
指向本地数组。与所有局部变量一样,此数组的范围仅在其声明的函数中。因此,当默认构造函数返回成员变量ptr
时,“悬空”。
对于复制构造函数,您不会分配ptr
可以指向的内存。因此,在索引它时,您正在索引未定义的内存位置。
至于你的问题,它与默认构造函数基本相同。您指定pointer
指向本地数组arr
。当函数返回时,数组不再存在,因此指针指向未使用的内存,并且其他函数可能已使用该指针。此外,你在那里做的是不创建动态数组,这将涉及使用new
分配内存。
答案 1 :(得分: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;
}
这样你就可以保留指针的值,你可以在其他函数中使用它们。