【发布时间】:2020-11-09 20:03:29
【问题描述】:
我有以下可重现的例子
#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 时,数组打印了我想要的预期结果。当我在main 中将x_array_functionA 复制到x_array 和printArray 时,输出结果不是我所期望的。前两个值始终为零。
为什么初始整数没有被复制?
注意:这是Getting rubbish value when cout my dynamic array 的后续行动。创建了一个新问题,因为我觉得如果没有适当的可重复示例,最初的问题就不清楚。也明白代码中可能存在内存泄漏。
【问题讨论】:
-
你
delete[]你的数组在functionA....的末尾 -
@ChrisMM 啊!现在我终于看到了。为
functionA中的new释放内存的正确方法是什么? -
你的错误在这里
delete []x_array_functionA; delete []y_array_functionA;请注意,在这些删除之前的 = 运算符y_length = y_length_functionA; y_array = y_array_functionA;只是将指针分配给指向相同的内存。 -
@churill 在实际程序中,
x_array和y_array是运行时用户输入的范围,因此没有固定的数组长度。 -
使用
std::vector会简化代码。
标签: c++ arrays pointers memory memory-management