【问题标题】:Why I cannot reallocate the *sm using realloc?为什么我不能使用 realloc 重新分配 *sm?
【发布时间】:2023-03-05 17:52:01
【问题描述】:

我的程序中有这个函数,其中 *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] = '\0';
    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] = '\0';
    }
    return sm;
}

调试时显示:

    sm = (char *)realloc(sm, size + 1);
// Exception has occurred.
// Trace/breakpoint trap

【问题讨论】:

标签: c pointers memory realloc


【解决方案1】:

您的分配超出了sm 的范围。

这一行:

int sz = l > size ? l : size;

sz 设置为lsize 中的较大者。然后使用sz 作为for 循环的边界。在你做的循环中:

sm[i] = 48 + r;

如果l 大于sizei 也将大于size,但sizesm 数组的最大索引。

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

sm = realloc(sm, sz);

for 循环之前。

【讨论】:

    猜你喜欢
    • 2018-02-16
    • 2016-04-06
    • 2015-09-29
    • 1970-01-01
    • 2019-04-18
    • 2014-12-16
    • 2017-01-16
    • 1970-01-01
    • 2021-07-08
    相关资源
    最近更新 更多