2016-08-19 1 views
-2

Où problème ??, j'essaye de le faire avec beaucoup de formes, mais avec des erreurs de realloc giveme.Realloc crash mon programme

#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

Bienvenue dans Stack Overflow! Il semble que vous deviez apprendre à utiliser un débogueur pour parcourir votre code. Avec un bon débogueur, vous pouvez exécuter votre programme ligne par ligne et voir où il dévie de ce que vous attendez. C'est un outil essentiel si vous voulez faire de la programmation. Pour en savoir plus: [Comment déboguer de petits programmes] (http://ericlippert.com/2014/03/05/how-to-debug-small-programs/). –

+0

Notez que 'fflush (stdin)' est UB sur la plupart des plates-formes. –

+0

J'ai un problème à la ligne 45 "changedirinmemory = realloc (array, numbschanger * sizeof (int));" –

Répondre

0

Si Weather Vane ne veut pas & hellip; Le problème se situe à la ligne 31 if (counter > numbs). Cela ne suffit pas si counter est égal à numbs

Avec entrée 6125346 -> accident
ligne changement 31-if (counter >= numbs)
Encore une fois avec l'entrée 6125346 -> fonctionne parfaitement

Mais vous avez beaucoup de petites choses votre code qui n'est pas entièrement correct. S'il vous plaît voir les commentaires que vous avez. Vous pouvez également aller à code review pour plus de lumières, mais votre code doit travailler en premier lieu, sinon ils vont vous déchirer en fines particules.

+0

@WeatherVane Aïe! % §§ &% $ C & P! Merci! – deamentiaemundi

+0

// Nombre entier stocké, de sorte que dans l'espace Nouvelle mémoire peut continuer à vérifier "if (saveint == 0%)" –

+0

Merci pour l'aide deamentiaemundi: D –