首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >无法解决此c程序中的内存管理(valgrind)问题

无法解决此c程序中的内存管理(valgrind)问题
EN

Stack Overflow用户
提问于 2019-06-09 21:56:29
回答 2查看 59关注 0票数 0

我的问题如下。我必须创建一个C程序,它将输入中的所有参数连接到一个缓冲区中,然后返回这个缓冲区。我的解决方案是可行的,但存在内存管理问题。

我如何解决这个问题?

代码语言:javascript
复制
#define RIALLOCA(buf, newsize) buf = realloc(buf, newsize);

char *mystrcat(char *buf, size_t sz, char *first, ...) {
    va_list l;
    va_start(l, first);

    buf = malloc(strlen(buf) + 1);

    if (sz < strlen(first) + 1) {
        sz += (strlen(first) + 1);
    }

    RIALLOCA(buf, sz + 1 + 16);
    strncat(buf, first, strlen(first));

    char *nextString = va_arg(l, char *);

    while (nextString != NULL) { 
        // sz += strlen(nextString);
        RIALLOCA(buf, strlen(buf) + strlen(nextString) + 1 + 16);
        strncat(buf, nextString, strlen(nextString));
        nextString = va_arg(l, char *);
    }   

    va_end(l);

    return buf;
}   

int main(int argc, char *argv[]) {
    if (argc != 7) {
        printf("troppi pochi argomenti\n");
        return -1; 
    }   
    char *buffer = NULL;
    RIALLOCA(buffer, 16);  // macro che effettua l'allocazione
    buffer[0] = '\0';
    buffer = mystrcat(buffer, 16, argv[1], argv[2], argv[3], argv[4], argv[5],
                      argv[6], NULL);
    printf("%s\n", buffer);
    free(buffer);     
    return 0;
}

这是Valgrind的问题

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56515194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档