问题描述
我正在尝试编写一个将一些十进制数转换为位的代码。 有更简单的方法可以达到这个结果,但我是在 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 (将#修改为@)