Hi,

can someone plss tell me what i'm doing wrong..

error:
Code:
*** glibc detected *** double free or corruption
(fasttop): 0x0804a008 ***
Aborted
code:
Code:
#include <stdio.h>
#include <stdlib.h>


void clearInput();
long *allocate_numberarray(long len);
void our_free(long *mem);
void print(long *mem, long len);
void einlesen(long *mem, long len);
long *change_size(long *mem, long old_size, long new_size);
long append (long *mem1, long size1, long *mem2, long size2, long
 *mem3, long size3);


int main(int argc, char *argv[])
{
  long *test;
  long *testneu;
  long *wert1;
  long *wert2;
  long *wert3;
  long anzahl,anzahlneu,anzahl1,anzahl2,anzahl3,a;
  
  printf("Geben Sie eine Anzahl ein: ");
  scanf("%ld",&anzahl);
  clearInput();
  test=allocate_numberarray(anzahl);

  einlesen(test, anzahl);

  printf("\n\nWerte ausgeben\n\n");
  print(test,anzahl);

  printf("\nGeben Sie eine neue Anzahl ein: ");
  scanf("%ld",&anzahlneu);
  clearInput();
  testneu=change_size(test, anzahl, anzahlneu);
  einlesen(testneu,anzahlneu);
  printf("\n\nNeue Werte ausgeben\n\n");
  print(testneu,anzahlneu);

  our_free(test);
  our_free(testneu);
  
  printf("\n\n");
  printf("Geben Sie eine Anzahl1 ein: ");
  scanf("%ld",&anzahl1);
  clearInput();
  wert1=allocate_numberarray(anzahl1);
  einlesen(wert1,anzahl1);
  printf("\n\nWerte1 ausgeben\n\n");
  print(wert1,anzahl1);
  
  printf("\nGeben Sie eine Anzahl2 ein: ");
  scanf("%ld",&anzahl2);
  clearInput();
  wert2=allocate_numberarray(anzahl2);
  einlesen(wert2,anzahl2);
  printf("\n\nWerte2 ausgeben\n\n");
  print(wert2,anzahl2);
  
  anzahl3=anzahl1+anzahl2;
  wert3=allocate_numberarray(anzahl3);  
  a=append (wert1,anzahl1,wert2,anzahl2,wert3,anzahl3);
  if(a==0)
  {
    fprintf(stderr,"+++ Fehler +++\n");
    our_free(wert1);
    our_free(wert2);
    our_free(wert3);
    exit(-1);
  }
  else
  {
    printf("\n\nWerte3 ausgeben\n\n");
    print(wert3,anzahl3);
    printf("\n\n");
  }  
  our_free(wert1);
  our_free(wert2);
  our_free(wert3);

  printf("Press ENTER to continue...\n");
  getchar();
  return 0;
}




void clearInput()
{
while(getchar() != '\n');
}

long *allocate_numberarray(long len)
{
  long *ptr;
  ptr=calloc(len,(sizeof(long)));
  if(ptr==0)     
  {
    fprintf(stderr,"+++ Fehler +++\n");
    exit(-1);
  }
  return ptr;
}

void our_free(long *mem)
{
  if(mem)
  {
    free(mem);
    mem=0;
  }
}

void print(long *mem, long len)
{
  long i;
  for(i=len-1;i>=0;i--)
    printf("%ld. Zahl = %ld\n",i+1,mem[i]);
  printf("\n");
}

void einlesen(long *mem, long len)
{
  long i;
  printf("\nGeben Sie %ld Werte ein:\n\n",len);
  for(i=0;i<len;i++)
  {
    printf("%ld. Wert: ",i+1);
    scanf("%ld",&mem[i]);
    clearInput();
    if((mem[i]<(-9))||(mem[i]>9))
    {
      fprintf(stderr,"+++ Fehler +++\n");
      exit(-1);
    }
  }
}


long *change_size(long *mem, long old_size, long new_size)
{
  long *memnew;
  memnew=realloc(mem,new_size*sizeof(long));
  if(memnew==0)
  {
    fprintf(stderr,"+++ Fehler +++\n");
    exit(-1);
  }
  mem=0;
  return memnew;     
}

long append (long *mem1, long size1, long *mem2, long size2, long
 *mem3, long size3)
{
  long i;
  if((size1>size3)||(size2>size3))
  {
    fprintf(stderr,"+++ Fehler +++\n");
    return 0;
  }
  for(i=0;i<size1;i++)
    mem3[i]=mem1[i];
  for(i=0;i<size2;i++)
    mem3[size1+i]=mem2[i];
  return 1;
}
thx in advance