meine Funktion erhalten zwei vorhanden Array (+ Größen) und Zeiger, die in Funktion neues Array erstellen und die Größe am Ende neu zuweisen. schließlich gibt die Funktion die neue Größe zurück, aber der printf des neuen Arrays stürzt ab. der Algorithmus arbeitet casue die neue Größe wirklich wahr.Probleme mit Realloc und Array
int UniteArray(int *a,int sizeA,int *b,int sizeB,int *tempArray)
{
int i=0,j=0,counter=0;
tempArray=(int*)malloc(sizeA*sizeof(int));
while (i<sizeA)
{
if (a[i]==b[j])
{
tempArray[counter++]=a[i];
i++;j++;
}
else if (a[i]<b[j])
i++;
else if (b[j]<a[i])
j++;
}
tempArray=(int*)realloc(tempArray,counter);
return counter;
}
hier der Funktionsaufruf;
void Ex3()
{
int *a,*b,*unite;
int sizeA,sizeB,newSize,counter,i;
a=BuildArray(&sizeA);//Build the A array.
b=BuildArray(&sizeB); //Build the B array.
merge_sort(a,0,sizeA-1);//merge the A array.
merge_sort(b,0,sizeB-1); //merge the B array.
counter=UniteArray(a,sizeA,b,sizeB,&unite); //<<<<<<< HERE
printf ("The new Length: %d.\n",counter);
for (i=0;i<counter;i++)
printf ("%d ",unite[i]);
So ignorieren Sie Compiler-Warnungen (oder verwenden Sie einen alten Compiler), aber wuomer, warum Ihr Code nicht funktioniert. Beim nächsten Mal aktivieren Sie alle empfohlenen Warnungen, lassen Sie den Code ohne Warnmeldung kompilieren und verwenden Sie den Debugger. Und lerne, was lokale Variablen sind. Das sollte der erste in Ihrem C-Buch oder Ihrer Lektion gewesen sein. Wenn Letzteres: Sagen Sie Ihrem Lehrer, dass er sich über lokale Variablen und den Vorbeifahr-Wert informieren soll. – Olaf
* Ähem * Um das etwas taktvoller zu machen ... OP, müssen Sie den vollständigen Text des Fehlers in Ihre Frage einfügen. Wir können Ihnen wirklich nicht helfen, wenn "es abgestürzt ist" oder "es gab einen Fehler". Wenn es sich um einen "Segmentierungsfehler" handelt, müssen Sie möglicherweise ein anderes Tool verwenden, um den Grund zu finden. Weitere Informationen zu segfaults finden Sie unter [diese Frage und Antwort] (http://stackoverflow.com/q/33047452/472647). – CodeMouse92