Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 输出错误_C++ - Fatal编程技术网

C++ 输出错误

C++ 输出错误,c++,C++,代码如下: [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[],

代码如下: [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;
}
#包括
#包括
//V和^或
使用名称空间std;
inta[]={0,1,1};
intb[]={1,0,1};
整数*和1(整数A[],整数B[]
{
int-ret[3];
对于(int i=0;i<3;i++)
{
如果(A[i]==1&&B[i]==1)
{
ret[i]=1;
}
其他的
{
ret[i]=0;
}
}
返回ret;
}
整数*或1(常数整数A[],常数整数B[]
{
int-ret[]={0,0,0};
对于(int i=0;i<3;i++)
{
如果(A[i]==1 | | B[i]==1)
{
ret[i]=1;
}
其他的
{
ret[i]=0;
}
}
返回ret;
}
int main()
{
int*a=and1(a,B);
int*b=or1(A,b);
如果(*(a+1)=*(b+1))
{

cout当函数作用域
{}
结束时,返回指向函数本地数组的指针,而这些本地数组不存在。得到的是指向不存在的对象的指针和未定义的行为函数
中的
和1
和1
的局部变量。当
和1
完成执行时,它超出范围。因此返回其地址没有意义。 相反,您可以将
ret
数组传递给
和1
(与or1类似),原型为:

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

您正在从函数
和1
返回一个临时数组指针,结果未定义

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

int* a = and1(A, B); // <-- Undefined behavior
int*and1(inta[],intb[]
{
int-ret[3];
//...
返回ret;
}

int*a=and1(a,B);//如果你找不到你的错误,那么你会返回or1和and1中指向本地数组的指针,为什么不将结果数组作为第三个参数传递,并将结果存储在其中,然后返回void?也就是说,将原型更改为void和1(int*a,int*B,int*ret)or1也一样。这将确保您所做的更改存储在结果中。这解释了一切。谢谢。我将选择此作为答案(10分钟后,系统将允许我)再次感谢。