为什么此代码畸形对STL向量的参考访问?
我有一个非常基本的 Cpp 程序:
// tmp.cpp
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <vector>
#include <set>
#include <iostream>
#include <fstream>
#include <sstream>
#include "viterbi.hpp"
using namespace std;
std::vector<std::vector<size_t>> FindBoundaries()
{
std::vector<std::vector<size_t>> boundaries = {{1, 2, 3, 5}, {0, 9, 1, 3, 4, 5, 6, 90}, {3, 4, 5, 6, 7, 8, 9}};
return boundaries;
}
int main()
{
auto boundaries = FindBoundaries();
std::cout << boundaries[0].size() << std::endl;
Viterbi(boundaries[0], boundaries[0]);
return 1;
}
// viterbi.hpp
#pragma once
#include <functional>
void Viterbi(
const std::vector<size_t>& observations,
const std::vector<size_t>& hidden_states);
// viterbi.cpp
#include <algorithm>
#include <map>
#include <iostream>
#include <vector>
std::vector<size_t> Viterbi(
const std::vector<size_t>& observations,
const std::vector<size_t>& hidden_states)
{
std::cout << hidden_states.size() << std::endl;
return {};
}
如您所见,这是一个非常简单的项目。
当我用 gcc 或 clang 编译它时,我得到这个输出:
4
9
这非常奇怪,它确实应该打印相同的数字两次,此外,如果我使用 gdb 检查 hide_states 的值,我得到这个:
std::vector of length 9, capacity 9 = {4300736, 4300768, 4300768, 4300784, 4300848, 4300848, 4300864, 4300920, 4300920}
但是观察可以吗? 如果我不将此代码拆分为 2 个文件,而是将其保留在一个文件中,则错误不会再发生。
我完全困惑了。
I have, what I think is a very basic Cpp program:
// tmp.cpp
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <vector>
#include <set>
#include <iostream>
#include <fstream>
#include <sstream>
#include "viterbi.hpp"
using namespace std;
std::vector<std::vector<size_t>> FindBoundaries()
{
std::vector<std::vector<size_t>> boundaries = {{1, 2, 3, 5}, {0, 9, 1, 3, 4, 5, 6, 90}, {3, 4, 5, 6, 7, 8, 9}};
return boundaries;
}
int main()
{
auto boundaries = FindBoundaries();
std::cout << boundaries[0].size() << std::endl;
Viterbi(boundaries[0], boundaries[0]);
return 1;
}
// viterbi.hpp
#pragma once
#include <functional>
void Viterbi(
const std::vector<size_t>& observations,
const std::vector<size_t>& hidden_states);
// viterbi.cpp
#include <algorithm>
#include <map>
#include <iostream>
#include <vector>
std::vector<size_t> Viterbi(
const std::vector<size_t>& observations,
const std::vector<size_t>& hidden_states)
{
std::cout << hidden_states.size() << std::endl;
return {};
}
As you can see this is a very simple project.
When I compile it with either gcc or clang, I am getting this ouput:
4
9
Which is utterly bizarre, it really should be printing the same number twice, moreover if I inspect the values of hidden_states using gdb I get this:
std::vector of length 9, capacity 9 = {4300736, 4300768, 4300768, 4300784, 4300848, 4300848, 4300864, 4300920, 4300920}
But observations
is fine?
If I don;t split this code into 2 files and instead keep it in one then the error does not happen anymore.
I am utterly confused.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论