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