c++ 返回不同的结果

标签 c++ algorithm debugging return-value greedy

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

相关文章:

c++ - 奇怪的 g++ 编译器在模板函数中对 typeid 的行为

javascript - extjs 网格适用于 Firefox,不适用于 IE

algorithm - 是否有生成序列所有排列的递归算法的证明?

algorithm - 理解这个 NP 完全优化?

c++ - 如何调试 Visual C++ 运行时错误

objective-c - LLDB 等同于 Xcode4.1 中 GDB 中的 `po`?

c++ - 当函数返回由模板类型和另一个类型组成的类型时,模板参数推导

c++ - makefile 没有这样的文件或目录 : libxml/xmlstring. h

c++ - 在特定时间更改 QLabel 的背景颜色

algorithm - 通过点位置或图像进行角点检测