2009-02-28, 12:04
  #1
Medlem
Den bortkommenterade koden fungerar(Om jag tar bort reallocraderna). Jag frsker dock dra ner p det jag allokerar och frsker kra realloc istllet fr malloc.
Det jag vill gra r allts att dela upp en array i 2 nya arrayer beronde p pivot.
Det som hnder nr jag kr det hr r att jag fr en SIGABRT.


Kod:
splittedArray splitArrayInToParts(int pivot, int *arrayToSplit, int size) {
   splittedArray newArray;
 //  newArray.smallerThanPivot = (int*) malloc (size * sizeof(int));    
 //  newArray.greaterThanPivot = (int*) malloc (size * sizeof(int)); 
   newArray.sizeOfsmallerThanPivot = 0; 
   newArray.sizeOfgreaterThanPivot = 0; 
   int i = 0, j = 0;    
   while(size != 0 ) {
      int number = arrayToSplit[size-1];
      if (number <= pivot) {
         newArray.smallerThanPivot = (int*) realloc (newArray.smallerThanPivot, i+1 * sizeof(int));
         newArray.smallerThanPivot[i] = number;
         newArray.sizeOfsmallerThanPivot++;
         i++;   
      } else {
          newArray.greaterThanPivot = (int*) realloc (newArray.greaterThanPivot, j+1 * sizeof(int));
          newArray.greaterThanPivot[j] = number;
          newArray.sizeOfgreaterThanPivot++;         
         j++;   
      }   
      size--;
   }
   return newArray; 
}
Citera
2009-02-28, 14:13
  #2
Medlem
Kod:
newArray.smallerThanPivot = (int*) realloc (newArray.smallerThanPivot, (i+1) * sizeof(int));
...
newArray.greaterThanPivot = (int*) realloc (newArray.greaterThanPivot, (j+1) * sizeof(int));
Citera
2009-02-28, 14:32
  #3
Medlem
Citat:
Ursprungligen postat av Quellcrist
Kod:
newArray.smallerThanPivot = (int*) realloc (newArray.smallerThanPivot, (i+1) * sizeof(int));
...
newArray.greaterThanPivot = (int*) realloc (newArray.greaterThanPivot, (j+1) * sizeof(int));

Det var tyvr inte felet. Eller det var ett fel men det lste inte problemet.
Mvh
Citera
2009-02-28, 15:37
  #4
Medlem
I s fall har du nog inte initierat dina pivot-arrayer till ngot bra...

Det hr funkar fr mig utan problem
Kod:
void splitArrayInToParts(int pivot, int *arrayToSplit, int size) {
// splittedArray newArray;
 //  newArray.smallerThanPivot = (int*) malloc (size * sizeof(int));
 //  newArray.greaterThanPivot = (int*) malloc (size * sizeof(int));

   int sizeOfsmallerThanPivot = 0;
   int sizeOfgreaterThanPivot = 0;
   int* smallerThanPivot  = (int*)malloc(sizeof(int));
   int* greaterThanPivot  = (int*)malloc(sizeof(int));

   int i = 0, j = 0;

   while(size != 0 ) {
      int number = arrayToSplit[size-1];
      if (number <= pivot) {
         smallerThanPivot = (int*) realloc (smallerThanPivot, (i+1) * sizeof(int));
         smallerThanPivot[i] = number;
         sizeOfsmallerThanPivot++;
         i++;
      } else{
          greaterThanPivot = (int*) realloc (greaterThanPivot, (j+1) * sizeof(int));
          greaterThanPivot[j] = number;
          sizeOfgreaterThanPivot++;
          j++;
      }
      size--;
   }
   return;
}
Citera
2009-02-28, 16:01
  #5
Medlem
newArray.smallerThanPivot = NULL;
newArray.greaterThanPivot = NULL;

Du har rtt, om jag gr sdr s funkar det.
Citera
2009-02-28, 17:14
  #6
Medlem
Yes, realloc funkar som malloc om pekaren r null och drefter s r de "giltiga" vid varje anrop.
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in