请在此代码中出错:
#include <iostream>
#include <vector>
unsigned __int32 ConvertToChars(std::vector<int> container, char** pChars)
{
*pChars = (char*)&container[0];
return container.size() * sizeof(int);
}
void ConvertToIntegers(char* chars, short size, std::vector<int>& container)
{
int count = size / sizeof(int);
int* pIntegers = (int*)chars;
for(int i=0; i < count; ++i)
{
container.push_back(*(pIntegers++));
}
}
void Print(const std::vector<int>& container)
{
for(int i=0; i < container.size(); ++i)
{
std::cout << container[i] << std::endl;
}
}
void main()
{
std::vector<int> vec1;
vec1.push_back(1);
vec1.push_back(2);
vec1.push_back(3);
char* buffer = 0;
short bufferSize = ConvertToChars(vec1, &buffer);
std::vector<int> vec2;
ConvertToIntegers(buffer, bufferSize, vec2);
Print(vec2);
char c;
std::cin >> c;
}
功能打印打印值:
谢谢!!!
答案 0 :(得分:4)
当你将容器传递给ConvertToChars
时,你正在复制容器,然后将指针指向其中一个元素,然后看到副本超出范围,这会使你的指针失效。
答案 1 :(得分:3)
我真的不明白您的计划的重点,但部分问题出在您的ConvertToIntegers
函数中,您可以将char *
解释为int *
。< / p>
int* pIntegers = (int*)chars;
for(int i=0; i < count; ++i)
{
container.push_back(*(pIntegers++));
}
您将基础字节解释为int
类型,这可能会导致您看到的数字。我很惊讶您没有遇到分段错误,因为这会导致您超越原始char *
所指向的内存块。