2013-04-19 2 views
0

i의 값으로 쌍 (struct pairs { int i; int j; })을 정렬하려고합니다. 정렬 후에 나는 그것에 대응하는 j의 가장 큰 수를 가진 쌍을 저장하고 싶습니다. 은 (1,3), (1,4), (2,5), (2,6), (2,7)입니다.구조체 els (int * i, int * j, int count), els [0]은 2,5,, 2,6,, 2,7,이 있어야합니다. 여기서 2는 i, j.els [1]에서 6,7은 1을 가질 것이고, 그에 상응한다. 구조 els 때 구조를 사용하여 코드를 잘 실행중인 코드 쌍을 사용하고 있지만 두 개의 개별 배열에 갈 때 나는 j assert() coredumped 오류가 점점 오전. 다양한 장소에서쌍을 정렬하는 중 메모리를 가져 오는 중 오류가 발생했습니다. 아무도 내가 코드에서 잘못 가고있는 곳을 말해 줄 수 있습니까?

#include<iostream> 
#include<time.h> 
#include<stdio.h> 
#include<math.h> 
#include<stdlib.h> 
struct pairs 
{ 
    int i; 
    int j; 
}; 
struct els 
{ 
     int *i; 
    int *j; 
    int count; 
}; 
void sortpairs(struct pairs *p,int count); 
void sortj(struct pairs *p,int count); 
void swapp(struct pairs *p,struct pairs *q); 
int random(int min,int max); 
int elina(int el,int arr[],int siz); 

int main() 
{ 
    struct pairs *pp = new struct pairs[10]; 
    srand(time(0)); 
    for(int i = 0;i<10;i++) 
    { 
     pp[i].i = random(0,10); 
     pp[i].j = random(0,10); 
    } 
    std::cout <<"BEFORE\n"; 
    for(int i = 0;i<10;i++) 
    { 
     std::cout << pp[i].i <<"  "<<pp[i].j<<"\n"; 
    } 
    sortj(pp,10); 
    std::cout << "Done Sorting\n"; 
    std::cout <<"AFTER\n"; 
    for(int i = 0;i<10;i++) 
    { 
     std::cout << pp[i].i <<"  "<<pp[i].j<<"\n"; 
    } 
    sortpairs(pp,10); 


    return 0; 
} 

void swapp(struct pairs *p,struct pairs *q) 
{ 
    struct pairs temp; 
    temp = *p; 
    *p = *q; 
    *q = temp; 
} 

int random(int min,int max) 
{ 
    int n; 
    n = rand()%(max - min) + min; 
    return n; 
} 

int elina(int el,int arr[],int siz) 
{ 
    for(int i = 0 ;i < siz;i++) 
    { 
     if(arr[i] == el) 
      return i; 
    } 
    return -9; 
} 

void sortj(struct pairs *p,int count) 
{ 
for(int i = 0 ; i < count - 1;i++) 
    for(int j = i + 1;j < count;j++) 
    { 
     if(p[i].i > p[j].i) 
      swapp(&p[i],&p[j]); 
    } 
} 

void sortpairs(struct pairs *p,int count) 
{ 
    int *arr = new int[count]; 
    int unqc = 0,az = 0,t; 
    int i; 
    for(i = 0; i< count ;i++) 
    { 
     arr[i] = p[i].i; 
     if(t = elina(arr[i],arr,i) < 0) 
      unqc++; 
    } 
    az = i; 
    std::cout <<"The Unique Elements are "<<unqc<<"\n"; 
    struct els *e = new struct els[unqc]; 
    int ec = 0; 
    //e[0].i = new struct pairs[10]; 
    e[0].i = new int[10]; 
    e[0].j = new int[10]; 
    e[0].count = 0; 
    for(int j = 0 ; j < count;j++) 
    { 
     if(j > 0) 
     { 
      if(p[j].i == p[j-1].i) 
      { 
      //e[ec].p[count].i = p[j].i; 
      //e[ec].p[count].j = p[j].j; 
      e[ec].i[count] = p[j].i; 
      e[ec].j[count] = p[j].j; 
      e[ec].count++; 
      } 
      else 
      { 
      ec++; 
      //e[ec].p = new struct pairs[10]; 
      e[ec].i = new int[10]; 
      e[ec].j = new int[10]; 
      e[ec].count = 0; 
      //e[ec].p[count].i = p[j].i; 
      //e[ec].p[count].j = p[j].j; 
      e[ec].i[count] = p[j].i; 
      e[ec].j[count] = p[j].j; 
      e[ec].count++; 
      } 
     } 
     else 
     { 
      //e[ec].p[count].i = p[j].i; 
      //e[ec].p[count].j = p[j].j; 
      e[ec].i[count] = p[j].i; 
      e[ec].j[count] = p[j].j; 
      e[ec].count++; 
     } 
    } 
    for(int j = 0 ; j < unqc;j++) 
    { 
     std::cout << e[j].count <<"\n"; 
    } 
} 
+0

int * arr = new int [count]; 구조체 els * e = 새로운 구조체 els [unqc]; 삭제되지 않습니다. 새로운 데이터가 모두 삭제되어야합니다 – Arun

+0

이러한 데이터 유형으로 제한됩니까? 그렇지 않다면지도와 목록/벡터를 사용하여 동일한 결과를 얻을 수있는 솔루션을 추천 할 수 있습니다. – tbkn23

답변

0

당신은 당신이 작성하는이 코드를 쉽게 발견 할 대신 newstd::vector을 사용했다면

 e[ec].i[count] = p[j].i; 
     e[ec].j[count] = p[j].j; 

 e[ec].i[e[ec].count] = p[j].i; 
     e[ec].j[e[ec].count] = p[j].j; 

을해야하고, 그것은 적은 것 버그 및 제한 사항.

+0

감사합니다. 바보 같은 저를 간과합니다. –