2016-08-19 7 views
-2

어디에서 문제가 있습니까? 많은 형식으로 시도하지만 realloc giveme 오류가 있습니다.Realloc crash 내 programa

#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

스택 오버플로에 오신 것을 환영합니다! 디버거를 사용하여 코드를 단계별로 실행하는 방법을 배워야 할 필요가있는 것 같습니다. 좋은 디버거를 사용하면 한 줄씩 프로그램을 실행하고 예상 한 곳에서 벗어난 곳을 볼 수 있습니다. 프로그래밍을 할 때 필수적인 도구입니다. 추가 읽기 : [작은 프로그램을 디버깅하는 방법] (http://ericlippert.com/2014/03/05/how-to-debug-small-programs/). –

+0

'fflush (stdin)'은 대부분의 플랫폼에서 UB라는 것에주의하십시오. –

+0

45 행에 문제가 있습니다. "changedirinmemory = realloc (array, numbschanger * sizeof (int));" –

답변

0

날씨 베인이 & hellip하고 싶지 않은 경우;

문제는 줄에 if (counter > numbs) 거짓말. counter6125346 입력으로 numbs

에 동일한 경우는 그 것만으로는 충분하지 않습니다 - 입력으로> 충돌
변경 라인 (31) 다시 if (counter >= numbs)
6125346 ->은

완벽하게 작동하지만 당신은 작은 많은 것들에있다 귀하의 코드가 완전히 정확하지 않습니다. 당신이 가진 코멘트를 참조하십시오. 더 많은 깨달음을 얻기 위해 code review으로 갈 수도 있지만, 코드는 으로 먼저 작업해야합니다. 그렇지 않으면 잘게 자르지 않을 것입니다.

+0

@WeatherVane 아야! % §§ & % $ C & P! 감사! – deamentiaemundi

+0

// 새로운 메모리 공간에서 "if (saveint == 0 %)"를 계속 확인할 수 있도록 저장된 정수. –

+0

도움 주셔서 감사합니다. D –