2016-08-12 3 views
0

가변 길이의 System :: Byte 배열을 unsigned char **로 변환하는 C++ \ CLI 함수를 구현하고 싶습니다.가변 배열의 System :: Byte를 부호없는 char **

unsigned char**  NUANCECLR::IsItYou::convertBBtoCC(array<array<System::Byte>^>^ b) 
{ 
    unsigned char** x = NULL; 
    for (size_t indx = 0; indx < b->Length; indx++) 
    {  
      if (b[indx]->Length > 1) 
      { 
       pin_ptr<System::Byte> p = &b[indx][0]; 
       unsigned char* pby = p; 
       char* pch = reinterpret_cast<char*>(pby); 
       x[indx] = reinterpret_cast<unsigned char *>(pch); 
      } 
      else 
       x[indx] = nullptr; 
    } 
    return x; 
} 

나는 현재를 테스트 할 수 없습니다가 확인인지 아닌지, 어쩌면 누군가가 나를 도울 수, 나는 그것을 필요로하기 때문에 상대적으로 당신을 fast.Thank 말해 : 나는이했다!

답변

1

괜찮습니다. 이것은 당신의 얼굴을 여러 가지 다른 방법으로 꿇을 것입니다 :

unsigned char**  NUANCECLR::IsItYou::convertBBtoCC(array<array<System::Byte>^>^ b) 
{ 
    unsigned char** x = NULL; 

할당 된 저장 공간이 없습니다. x[anything]은 유효하지 않습니다.

for (size_t indx = 0; indx < b->Length; indx++) 
    {  
      if (b[indx]->Length > 1) 
      { 
       pin_ptr<System::Byte> p = &b[indx][0]; 

이 pining 포인터는이 if 블록의 끝에 범위를 벗어나 고정 해제됩니다. 시스템은 다시 이동하거나 char 배열을 뜻

   unsigned char* pby = p; 

이 바이트 주위 물체 wappers의 어레이에 대한 포인터를 취하고 그것을 할당에서 삭제할 수있다. 여기서 전문 지식을 주장하지는 않겠지 만, 숨겨진 많은 부두가 없이는 이것이 투명하게 작동한다고 생각하지 않습니다.

   char* pch = reinterpret_cast<char*>(pby); 

이 실제로 작동하지만 이전 가능성이되지 않습니다 변경할 수 없기, 나는 의미있는 가리 키도록 pch을 기대하지 않습니다. 위에서 언급 한 바와 같이

   x[indx] = reinterpret_cast<unsigned char *>(pch); 

, x는 모든 스토리지를 가리하지 않습니다. 이것은 운명이다.

  } 
      else 
       x[indx] = nullptr; 

} 
    return x; 

운명 아직도 운명.

} 

추천 :

  1. 크기 b->Lengthchar * 어레이 new로 단독 스토리지를 할당 x
  2. 할당 크기 b[indx]->Lengthchar 어레이 new로 단독 스토리지를 할당 모두 복사 b의 요소를 입력 한 다음 x[indx]에 할당합니다. x
  3. 수익률은 모든 배열 x가 가리키는 당신이 그들과 함께 할 때 다음 x이 삭제됩니다 확인합니다. 또는 char** 대신 vector<vector<char>>을 사용하십시오.
+0

고마워요, 당신 말이 맞아요, 할당에 대해 잊어 버렸습니다, 내 뇌는 KO입니다 :) – WhiteR0205