我有以下可复制的示例
#include <string>
#include <iostream>
using namespace std;
void printArray(int *data, int x)
{
for(int v = 0; v < x; v++)
cout << data[v] << endl;
}
void functionA(int &x_length, int &y_length, int *&x_array, int *&y_array);
int main()
{
int x_length = 0;
int y_length = 0;
int * x_array = new int[x_length];
int * y_array = new int[y_length];
functionA(x_length, y_length, x_array, y_array);
cout << "x length : " << x_length;
cout << endl;
cout << "y length : " << y_length;
cout << endl;
cout << "x array" << endl;
printArray(x_array, x_length);
cout << endl;
cout << "y array" << endl;
printArray(y_array, y_length);
delete [] x_array;
delete [] y_array;
}
void functionA(int &x_length, int &y_length, int *&x_array, int *&y_array)
{
int x_length_functionA = 0;
int y_length_functionA = 0;
int x_increment = 0;
int y_increment = 0;
// Create array x
for(int i = 3; i <= 8; i++)
{
++x_length_functionA;
}
int * x_array_functionA = new int[x_length_functionA];
for(int i = 3; i <= 8; i++)
{
x_array_functionA[x_increment++] = i;
}
x_length = x_length_functionA;
x_array = x_array_functionA;
// Create array y
for(int i = 3; i <= 10; i++)
{
++y_length_functionA;
}
int * y_array_functionA = new int[y_length_functionA];
for(int i = 3; i <= 10; i++)
{
y_array_functionA[y_increment++] =i;
}
y_length = y_length_functionA;
y_array = y_array_functionA;
delete []x_array_functionA;
delete []y_array_functionA;
}
输出结果(main()中的printArray)
x length : 6
y length : 8
x array
0
0
5
6
7
8
y array
0
0
5
6
7
8
9
10
预期结果(main()中的printArray)
x length : 6
y length : 8
x array
3
4
5
6
7
8
y array
3
4
5
6
7
8
9
10
当我在functionA()
中printarray
时,数组打印了我想要的预期结果。 当我将x_array_functionA
复制到x_array
和printarray
中时,输出结果不是我所期望的。 前两个值始终为零。
为什么初始整数没有被复制?
注意:这是在cout我的动态数组时获取垃圾值的后续操作。 创建了一个新的问题,因为我觉得最初的问题没有一个适当的可复制的例子是不清楚的。 还要理解代码中很可能存在内存泄漏。
我不知道这就是所有的错误,但是在函数a
的末尾,您有:
delete []x_array_functionA;
delete []y_array_functionA;
之后数组的使用是ub。 为了正确地清理内存,当您这样做时
x_array = x_array_functionA;
你应该
delete[] x_array;
x_array = x_array_functionA;
对于y_array
也是如此。
此处:
delete [] x_array_functionA;
delete [] y_array_functionA;
删除数组。 在这一点之后,数组已被删除。 访问它们是未定义的行为。 删除它们两次(因为它们也在main
中被删除)肯定是未定义的行为。
记住你不是删除指针,你是删除你分配的东西。 一次使用名为X_array
的变量删除数组,一次使用名为X_array_functionA
的变量删除数组,这两个事实完全无关--无论哪种方式,都要删除同一个数组两次。
您的代码也从不删除在main
中分配的数组。