gpt4 book ai didi

c - free() 函数不起作用

转载 作者:行者123 更新时间:2023-11-30 16:54:17 24 4
gpt4 key购买 nike

我构建了一个程序,可以将 10 进制转换为 2 进制和 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() 处停止。当我创建一个断点时,当我到达空闲状态时,程序就停止了,没有消息或警告。有人可以帮我吗?

最佳答案

您将内存分配为 ba10/16 * 4。对于小于 16 的输入值,其计算结果为零。根据 malloc 文档,您将获得空指针或可以传递给 free 的唯一指针。但您正在 ba16[0] 中赋值。对于输入值 16 也是如此。您已经分配了 4 个字节。但程序继续分配 ba16[0] 和 ba16[1],这会破坏数组。 ba2也存在同样的问题。我不知道您是否使用小于 16 或 2 的输入值进行测试。希望这有帮助。

关于c - free() 函数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40564481/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com