C ++数组上的错误输出
Wrong output on c++ arrays
我是 C++ 的新手,所以这个问题可能看起来很基础(愚蠢!)。我正在尝试 return 一个 (int i, int j) 的数组,它是一个位置(坐标)。
这是我的代码:
int* Unblocker(int d1[2],int d2[2])
{
int unblocker_position[2];
int distance;
distance = abs(d1[0]-d2[0])+ abs(d1[1]-d2[1]);
switch (distance)
{
case 1:
break;
case 2:
switch (abs(d1[0] - d2[0]))
{
case 2:
unblocker_position[0] = 1;
unblocker_position[1] = 0;
return unblocker_position;
break;
default:
return NULL;
break;
}
break;
default:
return NULL;
break;
}
}
int main(){
int p1[2]={0,0};
int p2[2]={2,0};
int * a = Unblocker(p1,p2);
cout << a[0] << " " << a[1] << endl;
return 0;}
输出为:
1 1
但是,我希望是“1 0”。我不确定我是在使用开关还是在使用数组作为 return 类型时犯了错误。我删除了 switch 中的其他案例,以便更容易进入重点。
如果您想要return 一个指向局部变量的指针,您需要将该变量存储在堆中。为此,您必须使用 new
运算符。
int *Unblocker(int d1[2], int d2[2])
{
int *unblocker_position = new int[2];
int distance;
distance = abs(d1[0] - d2[0]) + abs(d1[1] - d2[1]);
switch (distance)
{
case 1:
break;
case 2:
switch (abs(d1[0] - d2[0]))
{
case 2:
unblocker_position[0] = 1;
unblocker_position[1] = 0;
return unblocker_position;
break;
default:
return NULL;
break;
}
break;
default:
return NULL;
break;
}
return NULL;
}
int main()
{
int p1[2] = {0, 0};
int p2[2] = {2, 0};
int *a = Unblocker(p1, p2);
cout << a[0] << " " << a[1] << endl;
delete a;
return 0;
}
记得使用删除运算符来防止内存泄漏。
如果您想了解有关此主题的更多信息,我建议您查看 smart pointers。
我是 C++ 的新手,所以这个问题可能看起来很基础(愚蠢!)。我正在尝试 return 一个 (int i, int j) 的数组,它是一个位置(坐标)。
这是我的代码:
int* Unblocker(int d1[2],int d2[2])
{
int unblocker_position[2];
int distance;
distance = abs(d1[0]-d2[0])+ abs(d1[1]-d2[1]);
switch (distance)
{
case 1:
break;
case 2:
switch (abs(d1[0] - d2[0]))
{
case 2:
unblocker_position[0] = 1;
unblocker_position[1] = 0;
return unblocker_position;
break;
default:
return NULL;
break;
}
break;
default:
return NULL;
break;
}
}
int main(){
int p1[2]={0,0};
int p2[2]={2,0};
int * a = Unblocker(p1,p2);
cout << a[0] << " " << a[1] << endl;
return 0;}
输出为:
1 1
但是,我希望是“1 0”。我不确定我是在使用开关还是在使用数组作为 return 类型时犯了错误。我删除了 switch 中的其他案例,以便更容易进入重点。
如果您想要return 一个指向局部变量的指针,您需要将该变量存储在堆中。为此,您必须使用 new
运算符。
int *Unblocker(int d1[2], int d2[2])
{
int *unblocker_position = new int[2];
int distance;
distance = abs(d1[0] - d2[0]) + abs(d1[1] - d2[1]);
switch (distance)
{
case 1:
break;
case 2:
switch (abs(d1[0] - d2[0]))
{
case 2:
unblocker_position[0] = 1;
unblocker_position[1] = 0;
return unblocker_position;
break;
default:
return NULL;
break;
}
break;
default:
return NULL;
break;
}
return NULL;
}
int main()
{
int p1[2] = {0, 0};
int p2[2] = {2, 0};
int *a = Unblocker(p1, p2);
cout << a[0] << " " << a[1] << endl;
delete a;
return 0;
}
记得使用删除运算符来防止内存泄漏。
如果您想了解有关此主题的更多信息,我建议您查看 smart pointers。