2016-08-19 10 views
-2

Wo Problem ?? versuche ich es mit vielen Formen, aber mit realloc gibem Fehler.Realloc crash mein Programm

#include<stdio.h> 
#include<math.h> 
#include<stdlib.h> 
#define numbs 10 
//math.h para pow(); 
int main(){ 
    int *array = malloc(numbs * sizeof(int)); 
    if (array == NULL){ 
     printf("Error in memory 1"); 
     return -1; 
    } 
    int numbschanger = NULL; 
    int guardarcounter = NULL; 
    int *changedirinmemory = NULL; 
    int counter = NULL; // 0 
    int saveint = NULL; 
    int integer; 
    int numero = NULL; 
    int res = pow(2,3); // 2 ** 3 = 8, Una potencia. 
    printf("%d\n",res); 
    scanf("%d",&numero); // Guardar en la direccion numero. 
    fflush(stdin); 
    printf("Los divisores de %d son:\n",numero); 
    for(integer = 1;integer <= numero;integer++){ 
     if (numero % integer == 0){ // Integer 1 porque si hacemos una divicion de numero/0 Nos dara o un aviso en la consola de que no se puede dividir entre zero o un crash en el .exe 
      array[counter] = integer; 
      printf("%d\n",array[counter]); 
      counter++; 
     } 
     if (counter > numbs){ 
      break; 
     } 
    } 
    printf("Haven\'t problem 01\n"); 
    guardarcounter = counter; 
    saveint = integer; //Guardada el numero del integer, para que en el nuevo espacio de memoria pueda seguir comprobando "if (numero % integer == 0)" 
    for(integer;integer <= numero;integer++){ 
     if (numero % integer == 0){ 
      counter++; 
     } 
    } 
    if (numbs < counter){ 
     printf("Campo del crash."); 
     numbschanger = numbs + counter; 
     changedirinmemory = realloc(array,numbschanger * sizeof(int)); //Crash hereeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee 
     if (changedirinmemory == NULL){ 
      printf("Error in memory 2"); 
      return -1; 
     } 
    } 
    printf("Haven\'t problem 02\n"); 
    for(saveint;saveint <= numero;saveint++){ 
     if (numero % saveint == 0){ 
      changedirinmemory[guardarcounter] = saveint; 
      printf("%d\n",changedirinmemory[guardarcounter]); 
      guardarcounter++; 
     } 
    } 
    printf("Haven\'t problem 03\n"); 
    if (changedirinmemory != NULL){ 
     free(changedirinmemory); 
     printf("\n\nEl nuevo espacio de memoria esta libre."); 
    } 
    else{ 
     free(array); 
     printf("\n\nArray Libre."); 
    } 
    return 0; 
} 
+1

Willkommen bei Stack Overflow! Es klingt, als müssten Sie lernen, wie Sie einen Debugger verwenden, um durch Ihren Code zu gehen. Mit einem guten Debugger können Sie Ihr Programm Zeile für Zeile ausführen und sehen, wo es von dem, was Sie erwarten, abweicht. Dies ist ein essentielles Werkzeug, wenn Sie programmieren wollen. Weiterführende Literatur: [Wie kleine Programme zu debuggen] (http://ericlippert.com/2014/03/05/how-to-debug-small-programs/). –

+0

Beachten Sie, dass 'fflush (stdin)' auf den meisten Plattformen UB ist. –

+0

Ich habe ein Problem in Zeile 45 "changedirinmemory = realloc (array, numbschanger * sizeof (int));" –

Antwort

0

Wenn Wetterfahne nicht will & hellip;

Ihr Problem liegt in Zeile 31 if (counter > numbs). Das ist nicht genug, wenn counter zu numbs

Mit Eingang gleich 6125346 -> Absturz
Zeile ändern 31-if (counter >= numbs)
Wieder mit Eingang 6125346 -> funktioniert perfekt

Aber Sie haben viele kleine Dinge in Ihr Code, der nicht vollständig korrekt ist. Bitte beachten Sie die Kommentare, die Sie erhalten haben. Sie können auch zu code review für weitere Aufklärung gehen, aber Ihr Code muss Arbeit in erster Linie, sonst werden sie Sie in feine Fetzen reißen.

+0

@WeatherVane Autsch! % §§ &% $ C & P! Vielen Dank! – deamentiaemundi

+0

// Gespeicherte Integer-Nummer, so dass im neuen Speicherbereich kann weiterhin überprüfen "if (saveint == 0%)" –

+0

Vielen Dank für die Hilfe deamentiaemundi: D –