这是我的C代码,它是一个leetcode problem,我得到了“运行时错误”。所以我在VS2013中重新编译,问题是free(++tmp),为什么?我搞不懂,我就这样写C代码,只想知道更多关于指针的事情。

#include <stdio.h>
#include <stdlib.h>

/*   Add binary.
 *   a = "11", b = "1"
 *   result = "100"
 */

char *add_binary(char *a, char *b);

int main()
{
    printf("%s\n", add_binary("10", "1"));
    printf("%s\n", add_binary("1111", "1111"));
    return 0;
}

char *add_binary(char *a, char *b)
{
    int alen = 0, blen = 0, sum = 0;
    int len;
    char *tmp, *result;

    while(*a++) alen++;
    while(*b++) blen++;
    a -= 2;
    b -= 2;
    len = alen > blen ? alen : blen;
    tmp = (char *)malloc(len*sizeof(char));
    printf("%p\n", tmp);

    while(*a || *b){
        if(*a){
            sum += *a - '0' + 0;
            a--;
        }
        if(*b){
            sum += *b - '0' + 0;
            b--;
        }
        if(sum > 1){
            *tmp++ = 3 == sum ? '1' : '0';
            sum = 1;
        } else {
            *tmp++ = 1 == sum ? '1' : '0';
            sum = 0;
        }
    }
    *tmp = '\0';

    len += 1 == sum ? 1 : 0;
    result = (char *)malloc(len*sizeof(char));
    if(1 == sum){
        *result++ = '1';
    }
    while(*(--tmp)){
        *result++ = *tmp;
    }
    *result = '\0';
    printf("%p\n", tmp);
    free(++tmp);
    tmp = NULL;
    return (result-len);
}

最佳答案

您只能将结果指针值传递给free

tmp = (char *)malloc(len*sizeof(char));

然后
free(tmp);

可以。
mallocfree(++tmp)不正常,并调用未定义的行为。

10-08 09:44