2013-12-09 7 views
0

나는 아마 메모리에 액세스하고 있기 때문에 나는 여전히 lldb 오류가 발생합니다. io_seg_sort에 매개 변수를 조작 할 때 뭔가 잘못하고있는 것처럼 보입니다. qsort을 호출하기 전에 여전히 괜찮습니다. C++ qsort 2D 배열

#define IO_SEG_IMAX (IO_SEG - 1) 

    static int io_seg_sort (const void * seg1, const void * seg2) { 

      int * _seg1 = (int *)seg1; 
      int * _seg2 = (int *)seg2; 

      cout << _seg1[1] <<endl; // this gives some random values and not what i am expecting 

      if (_seg1[1] > _seg2[1]) { 
       return 1; 
      } 
      else if (_seg1[1] < _seg2[1]) { 
       return -1; 
      } 
      else { 
       return 0; 
      } 

     } 


      int **temp = new int *[IO_SEG]; 

      for (int i = 0; i <= IO_SEG_IMAX; i++) { 
       temp[i] = new int[2]; 
       memcpy(temp[i], inputs[i], sizeof(int) * 2); 
      } 


      qsort(temp, IO_SEG, sizeof(int *) , io_seg_sort); 

EDIT1

: cout 대신 내가 기대하고 무엇 호출 할 때 문제가 내가 io_seg_sort에 어떤 임의의 값을 얻고있다. inputs[i]은 반원입니다. int inputs[IO_SEG][2];

+4

C++ 수준을 사용하지 않는 이유는'algorithm ::''std :: sort' **입니까? –

+0

IO_SEG와 IO_SEG_IMAX 사이의 관계는 무엇입니까? – Moberg

+0

@Moberg 의미 IO_SEG_INDEX_MAX – Krab

답변

1

코드가 불필요하게 인쇄되는 주된 이유는 비교 함수에서 불일치 수준이 잘못되었다는 것입니다. qsort에 전달하는 temp 배열은 두 요소 배열에 포인터로 포인터로 구성됩니다. 즉, 비교 함수 안에서 실제로는 포인터가 int에 대한 포인터를 수신합니다. 나는. 이것은 당신이 io_seg_sort의 본문에 그것을로 _seg1_seg2를 통해 어레이에 액세스하려면

static int io_seg_sort (const void * seg1, const void * seg2) { 

     const int * _seg1 = *(const int *const *) seg1; 
     const int * _seg2 = *(const int *const *) seg2; 

처럼 뭔가를해야 이미

static int io_seg_sort (const void * seg1, const void * seg2) { 

     int * _seg1 = (int *)seg1; 
     int * _seg2 = (int *)seg2; 

     cout << _seg1[1] <<endl; 

잘못 (나는 또한 일부 const 한정자를 추가 코드가 작동하지 않아도됩니다.)

3

IO_SEG_MAX + 1 개의 항목을 IO_SEG 길이의 배열에 넣습니다. 당신이 정말로 C++에서이 작업을 수행하려는 경우

for (int i = 0; i < IO_SEG; i++) { 
     temp[i] = new int[2]; 
     memcpy(temp[i], inputs[i], sizeof(int) * 2); 
    } 

는하지만, 당신이 std::vectorstd::sort을 조사해야해야

for (int i = 0; i <= IO_SEG_IMAX; i++) { 
     temp[i] = new int[2]; 
     memcpy(temp[i], inputs[i], sizeof(int) * 2); 
    } 

.

+0

#define IO_SEG_IMAX (IO_SEG - 1) sry 나는 그것을 추가 할 것이다. – Krab

+0

나는 다른 질문을 추측한다. 그러면 IO_SEG 입력을 실제로 할 수 있는가? 입력의 수는 다양합니까? 귀하가 제공 한 코드에 다른 오류가 나타나지 않습니다. –

+0

도움이 될만한 정보가 있으면 더 많은 정보를 추가했습니다. – Krab