在我的main()
函数中,我声明了array
类型为int
的数字为1到10.然后我还有另外两个类型为int*
的函数数组及其大小作为参数,执行一些操作,每个操作返回一个指向新数组的指针。 我遇到问题的地方是第三个打印数组内容的函数。
#include <iostream>
using namespace std;
const int SIZE_OF_ARRAY = 10;
int main() {
int array[SIZE_OF_ARRAY] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int *ptr1 = 0;
ptr1 = function1(array, SIZE_OF_ARRAY);
print(array, SIZE_OF_ARRAY);
cout << endl;
int *ptr2 = 0;
ptr2 = function2(array, SIZE_OF_ARRAY);
print(array, SIZE_OF_ARRAY);
return 0;
}
void print(int array[], const int SIZE_OF_ARRAY)
{
for (int i = 0; i < (SIZE_OF_ARRAY * 2); i++)
{
cout << array[i] << " ";
}
}
int* function1(int array[], const int SIZE_OF_ARRAY)
{
int *ptr = new int[SIZE_OF_ARRAY];
// Do stuff.
return ptr;
}
int* function2(int array[], const int SIZE_OF_ARRAY)
{
int *ptr2 = new int[SIZE_OF_ARRAY * 2];
// Create new array double in size, and set contents of ptr2
// to the contents of array. Then initialize the rest to 0.
return ptr2;
}
正如预期的那样,调用print()
函数两次的结果类似于:
1 2 3 4 5 6 7 8 9 10 465738691 -989855001 1483324368 32767 -1944382035 32767 0 0 1 0
1 2 3 4 5 6 7 8 9 10 465738691 -989855001 1483324368 32767 -1944382035 32767 0 0 1 0
但我希望结果是这样的:
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10 0 0 0 0 0 0 0 0 0 0
我怎样才能做到这一点? (请注意,对于此作业,我使用的是C ++ 98)。提前谢谢。
答案 0 :(得分:0)
new int[SIZE_OF_ARRAY]
分配内存,但不为数组元素赋值。你看到的是当它被分配给数组时在那个内存中的内容。您可以更改function2
以将零分配给数组元素,如果这是您想要的。
答案 1 :(得分:0)
首先,您希望在对print
的两次调用中打印不同数量的元素,因此您不应委托决定是否将大小乘以2加print
,而是它在呼叫方面。将print
功能更改为仅迭代SIZE_OF_ARRAY
,并将您调用它的两个位置更改为:
print(ptr1, SIZE_OF_ARRAY);
和
print(ptr2, SIZE_OF_ARRAY * 2);
相应。
现在,我假设您的第二个函数确实为所有20个元素赋值,但如果没有,那么它没有赋值的值将继续包含垃圾。要解决它,只需在第二个函数的开头初始化它们:
int *ptr2 = new int[SIZE_OF_ARRAY * 2];
for (size_t i = 0; i < SIZE_OF_ARRAY * 2; ++ i) ptr2[i] = 0;
通过这两项更改,您应该获得所需的行为。
此外,如果您使用new[]
分配内容,则需要使用delete[]
删除它,否则会出现内存泄漏。在main
:
delete[] ptr1;
delete[] ptr2;
请注意,在这种情况下,使用delete
代替delete[]
会出错。如果将某些内容分配为数组,则必须作为数组删除。