2010-11-30 75 views
2

請自己做錯了什麼在此代碼:一些錯誤的C++代碼

#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

謝謝!

回答

4

當您將容器傳遞給ConvertToChars時,您正在複製該容器,然後獲取指向其中一個元素的指針,然後看到副本超出範圍,這會使指針失效。

+0

哦!我花了一個小時找到它! @sgolodetz你很棒!謝謝!!! – vinctr 2010-11-30 17:25:14

+0

@vinctr一定要接受他的答案,如果他說得對。 – Jimmy 2010-11-30 17:29:47

3

我真的不明白你的程序的地步,但你的問題的一部分是在你的ConvertToIntegers功能,你讓你的程序解釋一個char *int *

int* pIntegers = (int*)chars; 

for(int i=0; i < count; ++i) 
{ 
    container.push_back(*(pIntegers++)); 
} 

你解釋底層字節int類型,這可能導致你所看到的數字。我很驚訝你沒有遇到分段錯誤,因爲這會導致你超出原來的char *指向的內存塊。