为什么我不能使用 realloc 重新分配 *sm?
Why I cannot reallocate the *sm using realloc?
我的程序中有这个函数,其中*sm指针在重新分配时显示错误。我已尝试使用 malloc 和 free 手动调整 *sm 的大小,但 free 函数中显示相同的错误。
char *numc_util_add_str(char **str, int s) {
int size = 1;
char *sm = (char *)malloc(size + 1);
sm[0] = '0';
sm[1] = '[=10=]';
while (s--) {
int l = strlen(str[s]);
int sz = l > size ? l : size;
int t, r, car = 0;
for (register int i = 0; i < sz; i++) {
t = (i <= l ? str[s][i] - 48 : 0) + (i <= size ? sm[i] - 48 : 0) + car;
r = t % 10;
car = t / 10;
sm[i] = 48 + r;
}
if (car) {
size++;
sm = (char *)realloc(sm, size + 1);
sm[size - 1] = 48 + r;
}
sm[size + 1] = '[=10=]';
}
return sm;
}
调试时显示:
sm = (char *)realloc(sm, size + 1);
// Exception has occurred.
// Trace/breakpoint trap
您在 sm
范围外分配。
这一行:
int sz = l > size ? l : size;
将 sz
设置为 l
和 size
中的较大者。然后使用 sz
作为 for
循环的界限。在你做的循环中:
sm[i] = 48 + r;
如果l
大于size
,i
也会变得大于size
,但size
是[=的最大索引13=]数组。
我不明白你想做什么,所以我不确定正确的解决方法是什么。也许只是做
sm = realloc(sm, sz);
在 for
循环之前。
我的程序中有这个函数,其中*sm指针在重新分配时显示错误。我已尝试使用 malloc 和 free 手动调整 *sm 的大小,但 free 函数中显示相同的错误。
char *numc_util_add_str(char **str, int s) {
int size = 1;
char *sm = (char *)malloc(size + 1);
sm[0] = '0';
sm[1] = '[=10=]';
while (s--) {
int l = strlen(str[s]);
int sz = l > size ? l : size;
int t, r, car = 0;
for (register int i = 0; i < sz; i++) {
t = (i <= l ? str[s][i] - 48 : 0) + (i <= size ? sm[i] - 48 : 0) + car;
r = t % 10;
car = t / 10;
sm[i] = 48 + r;
}
if (car) {
size++;
sm = (char *)realloc(sm, size + 1);
sm[size - 1] = 48 + r;
}
sm[size + 1] = '[=10=]';
}
return sm;
}
调试时显示:
sm = (char *)realloc(sm, size + 1);
// Exception has occurred.
// Trace/breakpoint trap
您在 sm
范围外分配。
这一行:
int sz = l > size ? l : size;
将 sz
设置为 l
和 size
中的较大者。然后使用 sz
作为 for
循环的界限。在你做的循环中:
sm[i] = 48 + r;
如果l
大于size
,i
也会变得大于size
,但size
是[=的最大索引13=]数组。
我不明白你想做什么,所以我不确定正确的解决方法是什么。也许只是做
sm = realloc(sm, sz);
在 for
循环之前。