如何解决C 分配问题:将十进制数转换为位的函数
我正在尝试编写一个将一些十进制数转换为位的代码。 有更简单的方法可以达到这个结果,但我是在 C 语言中用内存开玩笑和开玩笑。
int ** decimalToBits(int *number,int size){
int **bits = (int **)malloc(sizeof(*bits)*size),i = 0;
for (int j = 0; j < size; j++) {
int * temp = (int *)malloc(sizeof(int));
while (number[j] >= 1) {
temp[i++] = number[j] % 2;
number[j] /= 2;
realloc(temp,sizeof(int));
}
printf("\n");
bits[j] = (int *) malloc(sizeof(int)*i);
for (int k = i-1; k >= 0; k--){
bits[j][k] = temp[k];
printf("%d",bits[j][k]);
}
i = 0;
}
return bits;
}
我遇到了一些分配问题,首先我要解释一下这个想法:
我向函数传递多个数字,例如:
int numbers[2] = {23,73};
decimalToBits(numbers,2);
每个转换后的数都会存储在**bits双指针中,所以bits[0]包含转换后的23个数,bits[1]也包含73个转换后的数。
当我拨打 bits[j] = (int *) malloc(sizeof(int)*i);
时出现问题,
因为这似乎让临时指针被一些随机数覆盖。事实上,如果我删除 bits[j] = (int *) malloc(sizeof(int)*i);
和 bits[j][k] = temp[k];
行并将 printf("%d",bits[j][k]);
替换为 printf("%d",temp[k]);
代码似乎有一个很好的行为,它给了我正确的输出:
10111
1001001
我还注意到从 bits[j] = (int *) malloc(sizeof(int)*8);
循环外部分配 for (int j = 0; j < size; j++)
可以让代码工作。那么为什么在像上面的代码一样声明时会出现这种分配问题,最好的解决方法是什么?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。