Realloc 使我的程序崩溃
Realloc crash my programa
哪里有问题??,我尝试用很多形式来做,但 realloc 给我错误。
#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;
}
如果风向标不想...
你的问题出在第31行if (counter > numbs)
。这还不够,如果 counter
等于 numbs
有输入 6125346
-> 崩溃
将第 31 行更改为 if (counter >= numbs)
再次输入 6125346
-> 完美运行
但是你的代码中有很多小东西不完全正确。请查看您收到的评论。您也可以转到 code review 以获得进一步的启发,但您的代码首先需要 工作 ,否则他们会把您撕成碎片。
哪里有问题??,我尝试用很多形式来做,但 realloc 给我错误。
#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;
}
如果风向标不想...
你的问题出在第31行if (counter > numbs)
。这还不够,如果 counter
等于 numbs
有输入 6125346
-> 崩溃
将第 31 行更改为 if (counter >= numbs)
再次输入 6125346
-> 完美运行
但是你的代码中有很多小东西不完全正确。请查看您收到的评论。您也可以转到 code review 以获得进一步的启发,但您的代码首先需要 工作 ,否则他们会把您撕成碎片。