2009-02-28, 12:04
  #1
Medlem
Den bortkommenterade koden fungerar(Om jag tar bort reallocraderna). Jag försöker dock dra ner på det jag allokerar och försöker köra realloc istället för malloc.
Det jag vill göra är alltså att dela upp en array i 2 nya arrayer beronde på pivot.
Det som händer när jag kör det här är att jag får 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 tyvär inte felet. Eller det var ett fel men det löste inte problemet.
Mvh
Citera
2009-02-28, 15:37
  #4
Medlem
I så fall har du nog inte initierat dina pivot-arrayer till något bra...

Det här funkar för 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 rätt, om jag gör sådär så funkar det.
Citera
2009-02-28, 17:14
  #6
Medlem
Yes, realloc funkar som malloc om pekaren är null och därefter 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