输出错误

时间:2013-03-09 07:44:25

标签: c++

这是代码: A [0](在主函数中)应该等于0,而不是1.我找不到我的错误。我想问题是在and1函数中的某个地方,但同样,我似乎无法找到它。无论如何,我很确定第一句话很好地解决了这个问题,但网站却迫使我写了更多的信息。

#include <iostream>
#include <string>
// V and ^ or
using namespace std;
int A[] = {0, 1, 1};
int B[] = {1, 0, 1};

 int* and1(int A[], int B[])
{
    int ret[3];
    for(int i = 0; i < 3; i++)
    {
        if(A[i] == 1 && B[i] == 1 )
        {
            ret[i] = 1;
        }
        else
        {
            ret[i] = 0;
        }
    }
    return ret;
}

int* or1(const int A[], const int B[])
{
    int ret[] = {0 ,0 ,0};
    for(int i = 0; i < 3; i++)
    {
        if(A[i] == 1 || B[i] == 1)
        {
            ret[i] = 1;
        }
        else
        {
            ret[i] = 0;
        }
    }
    return ret;
}

int main()
{
    int* a = and1(A, B);
    int* b = or1(A, B);
    if(*(a+1) == *(b+1))
    {
        cout << a[0] << endl;
    }
    return 0;
}

3 个答案:

答案 0 :(得分:3)

您正在返回指向函数本地数组的指针,并且当函数作用域{ }结束时,这些本地数组不存在。你得到的是指针指向不存在的东西和未定义的行为

答案 1 :(得分:2)

函数int ret[3];中的

and1and1的本地变量。当and1完成执行时,它超出范围。所以返回它的地址没有意义。 相反,您可以将ret数组传递给and1(类似于or1),原型为:

void and1(const int A[], const int B[], int ret[]);

答案 2 :(得分:2)

您正在从函数and1返回一个临时数组的指针。结果未定义。

int* and1(int A[], int B[])
{
   int ret[3];
   //...
   return ret;
}

int* a = and1(A, B); // <-- Undefined behavior

return ret之后,数组ret会破坏,并不意味着使用它。