Ваш код демонстрирует неопределенное поведение .
std::vector<void*>
и std::vector<int>
- это два совершенно разных и не связанных между собой типа, вы не можете безопасно разыграть их между собой, тем более что вы не можете гарантировать, что void*
и int
имеют одинаковый размер байта. .
Приведите значения , которые вы нажимаете, не применяйте саму vector
, например:
#include <iostream>
#include <vector>
#include <cstdint>
using namespace std;
void add(std::vector<void*> &col) {
col.push_back(reinterpret_cast<void*>(static_cast<intptr_t>(1)));
col.push_back(reinterpret_cast<void*>(static_cast<intptr_t>(2)));
col.push_back(reinterpret_cast<void*>(static_cast<intptr_t>(13)));
}
int main() {
std::vector<void*> col;
add(col);
cout << col.size() << endl;
for(int i=0;i<col.size();i++)
cout << reinterpret_cast<intptr_t>(col[i]) << endl;
return 0;
}
Конечно, вы действительно должны использовать правильный тип контейнера для начала:
#include <iostream>
#include <vector>
using namespace std;
void add(std::vector<int> &col) {
col.push_back(1);
col.push_back(2);
col.push_back(13);
}
int main() {
std::vector<int> col;
add(col);
cout << col.size() << endl;
for(int i=0;i<col.size();i++)
cout << col[i] << endl;
return 0;
}