realloc():两次计算后无效的下一个大小
realloc(): invalid next size after two computations
我创建了存储数字数组的结构。该数组是动态分配的。尝试在函数中重新分配一些 space 时会出现问题。错误是
realloc(): invalid next size
Aborted (core dumped)
结构如下
typedef struct big_number {
unsigned int *digits;
int num_of_digits;
}BigNumber;
函数如下所示(将数字与 BigNumber 相乘):
void scale(BigNumber a, int c, BigNumber* scaled)
{
scaled->num_of_digits = a.num_of_digits;
scaled->digits = NULL;
scaled->digits = malloc(scaled->num_of_digits * sizeof (unsigned int));
if (scaled->digits == NULL) {
error();
}
int carry = 0;
for (int i = scaled->num_of_digits; i >= 0; i--) {
int tmp = a.digits[i] * c + carry;
scaled->digits[i] = tmp % 10;
carry = tmp / 10;
}
if (carry != 0) {
//While trying realloc in this line problem occurs
scaled->num_of_digits += 1;
scaled->digits = realloc(scaled->digits, scaled->num_of_digits * sizeof (unsigned int));
scaled->digits[0] = carry;
}
}
main 中的调用如下所示:
printf("Results:\n");
scale(num_b, 5, &pomocna);
print_big_number(pomocna);
free(pomocna.digits);
数组从 0
到 n-1
。您正在写信给 array[n]
,它不存在
scaled->digits = malloc(scaled->num_of_digits * sizeof (unsigned int));
for (int i = scaled->num_of_digits; i >= 0; i--) { // AAA
int tmp = a.digits[i] * c + carry;
scaled->digits[i] = tmp % 10; // BBB
在 AAA 行中,您将 i
设置为数组的大小(n
)
在 BBB 行中,您尝试更改 scaled->digits[i]
(array[n]
)
我创建了存储数字数组的结构。该数组是动态分配的。尝试在函数中重新分配一些 space 时会出现问题。错误是
realloc(): invalid next size
Aborted (core dumped)
结构如下
typedef struct big_number {
unsigned int *digits;
int num_of_digits;
}BigNumber;
函数如下所示(将数字与 BigNumber 相乘):
void scale(BigNumber a, int c, BigNumber* scaled)
{
scaled->num_of_digits = a.num_of_digits;
scaled->digits = NULL;
scaled->digits = malloc(scaled->num_of_digits * sizeof (unsigned int));
if (scaled->digits == NULL) {
error();
}
int carry = 0;
for (int i = scaled->num_of_digits; i >= 0; i--) {
int tmp = a.digits[i] * c + carry;
scaled->digits[i] = tmp % 10;
carry = tmp / 10;
}
if (carry != 0) {
//While trying realloc in this line problem occurs
scaled->num_of_digits += 1;
scaled->digits = realloc(scaled->digits, scaled->num_of_digits * sizeof (unsigned int));
scaled->digits[0] = carry;
}
}
main 中的调用如下所示:
printf("Results:\n");
scale(num_b, 5, &pomocna);
print_big_number(pomocna);
free(pomocna.digits);
数组从 0
到 n-1
。您正在写信给 array[n]
,它不存在
scaled->digits = malloc(scaled->num_of_digits * sizeof (unsigned int));
for (int i = scaled->num_of_digits; i >= 0; i--) { // AAA
int tmp = a.digits[i] * c + carry;
scaled->digits[i] = tmp % 10; // BBB
在 AAA 行中,您将 i
设置为数组的大小(n
)
在 BBB 行中,您尝试更改 scaled->digits[i]
(array[n]
)