为什么我不能使用 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 设置为 lsize 中的较大者。然后使用 sz 作为 for 循环的界限。在你做的循环中:

sm[i] = 48 + r;

如果l大于sizei也会变得大于size,但size是[=的最大索引13=]数组。

我不明白你想做什么,所以我不确定正确的解决方法是什么。也许只是做

sm = realloc(sm, sz);

for 循环之前。