【发布时间】: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
【问题讨论】:
-
问题其实是晚了一点。
sm[size + 1] = '\0';应该是sm[size] = '\0';。 -
提示:
'0'比48更具可读性。 -
提示:不要转换
malloc的结果。唯一能实现的就是错误。 -
提示:不要使用
register。编译器可以自己解决这个问题。