c - Realloc 使我的程序崩溃

标签 c realloc

问题出在哪里??,我尝试用多种形式来实现,但使用 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为了进一步启发,但你的代码首先需要工作,否则它们会把你撕成碎片。

关于c - Realloc 使我的程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39042886/

相关文章:

c - 如何在启动时将数组放置在特定地址

c - 迭代器不属于它们分配的文本缓冲区

C printf 将 long long 转换为 %o (unsigned int) 时发生了什么

c - 调整c中数组的特定单元格的大小

c - 为什么在 char[] 上调用 realloc 时出现错误?

c++ - 如何使用 scanf 验证输入

c - 为什么逗号运算符似乎不能在我的代码中的 "if"语句和 "else"语句之间工作?

c++ - 我可以使用 std::realloc 来防止冗余内存分配吗?

c - realloc() 无法重新分配内存

c - 在 C 中使用 Realloc 的字符串