free()函数不起作用

时间:2016-11-12 15:37:30

标签: c pointers free

我构建了一个程序,用于翻译基数10 ti base 2和base 16:

#include <stdio.h>

int main(void)
{
    int b10, b2, b16;
    scanf("%d", &b10);//getting a number in base 10
    b16 = b10;
    b2 = b10;

    //******print the number in base 2
    int* ba2 = (int*)malloc(b10/2*4);
    int i = 0,j;
    while (b2 > 0){
        ba2[i] = b2 % 2;
        b2=b2 / 2;
        i++;
    }
    for (j = i-1; j >= 0; j--){
        printf("%d", ba2[j]);
    }   
    free(ba2);
    //**************************

    //******print the number in base 16
    printf("\n");
    int* ba16 = (int*)malloc(b10 / 16 * 4);
    i = 0;
    while (b16 > 0){
        ba16[i] = b16 % 16;
        b16 = b16 / 16;
        i++;
    }
    for (j = i - 1; j >= 0; j--){
        if (ba16[j] < 10)
            printf("%d", ba16[j]);
        else
            printf("%c", 'A' + (ba16[j] - 10));
    }
    free(ba16);
    //****************************

    getch();
    return 0;
}

由于某种原因,程序停在第二个free()。 当我创建一个断点时,程序刚刚停止,当我得到免费,没有消息或警告。 有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

您将内存分配为ba10 / 16 * 4.对于小于16的输入值,评估为零。根据malloc文档,您将获得空指针或可以传递给free的唯一指针。但是你要在ba16 [0]中分配值。同样适用于16的输入值。您已分配4个字节。但程序继续分配ba16 [0]和ba16 [1],这将破坏阵列。 ba2也存在同样的问题。我不知道你是否测试的输入值小于16或2.希望这会有所帮助。