c ++代码有问题

时间:2010-11-30 17:19:22

标签: c++ casting

请在此代码中出错:

#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;
}

功能打印打印值:

  • -572662307
  • -842150451
  • -572662307

谢谢!!!

2 个答案:

答案 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 *所指向的内存块。