gpt4 book ai didi

c++ 返回不同的结果

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:57:44 25 4
gpt4 key购买 nike

我发现我返回的参数在调用外部函数时与在本地函数中不同。我在代码的每个部分都设置了一些打印输出,但仍然不知道为什么没有返回参数 i:

int assign_cookie(vector<int>& g, vector<int>& s){  

if(s.size()==0 || g.size()==0){
cout << "size = 0, returning 0" << endl;
return 0;
}

cout << "s.size() = " << s.size() << endl;
cout << "g.size() = " << g.size() << endl;

sort(g.begin(), g.end());
sort(s.begin(), s.end());

unsigned int i, j = 0;
while(i<g.size() && j<s.size()){
if(g[i]<=s[j]) i++;
j++;
}
cout << "(assign_cookie) i = " << i << endl;
return i;

}

当我在main函数中调用时如下:

int main(){

int g[] = {1,2,3};
int s[] = {1,1};

vector<int> vg (g, g+3);
vector<int> vs (s, s+2);

int result = assign_cookie(vg,vs);
cout << "result = " << result << endl;
}

我得到的结果如下:

s.size() = 2
g.size() = 3
(assign_cookie) i = 1
(main) result = 0

我对结果很困惑。任何人都知道发生了什么事?预先感谢您的帮助!

最佳答案

你有未定义的行为,因为这里

unsigned int i,j=0;

你只初始化了 j 但没有初始化 i 然后你使用 i 作为 g[i] 中的索引从未赋予它有意义的值(value)。因此它是 UB,任何事情都可能发生。实际上这是一个有趣的 UB 案例,就像你做的那样

unsigned int i,j=0;
std::cout << "i = " << i << "\n";

它仍然打印

i = 0
(assign_cookie) i = 1
result = 0

see also here .即使编译器似乎将 i 初始化为 0,它仍然意识到存在 UB 并可以自由地产生垃圾输出。

关于c++ 返回不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42877549/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com