어디에서 문제가 있습니까? 많은 형식으로 시도하지만 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;
}
스택 오버플로에 오신 것을 환영합니다! 디버거를 사용하여 코드를 단계별로 실행하는 방법을 배워야 할 필요가있는 것 같습니다. 좋은 디버거를 사용하면 한 줄씩 프로그램을 실행하고 예상 한 곳에서 벗어난 곳을 볼 수 있습니다. 프로그래밍을 할 때 필수적인 도구입니다. 추가 읽기 : [작은 프로그램을 디버깅하는 방법] (http://ericlippert.com/2014/03/05/how-to-debug-small-programs/). –
'fflush (stdin)'은 대부분의 플랫폼에서 UB라는 것에주의하십시오. –
45 행에 문제가 있습니다. "changedirinmemory = realloc (array, numbschanger * sizeof (int));" –