返回指针后是否应该使用 free()

问题描述 投票:0回答:1

变量 z 指向已释放的地址

free()
如果我再次使用malloc它可以使用已释放的内存吗 我觉得这不对

char *conc(char *a, char *b){
    char *t = malloc(length(a) + length(b) + 1);
    for(int i = 0, n = length(a); i < n; i++){
        t[i] = a[i];
    }
    for(int j = 0, m = length(b); j < m; j++){
        t[length(a)+j] = b[j];
    }

    t[length(a) + length(b) + 1] = '\0';
    return t;
    free(t);
}

int main (void){

    char *x = "he";
    char *y = "llo dude";
    char *z = conc(x, y);


}

分配内存

char *t = malloc(length(a) + length(b) + 1);
并重新调整指针后,我释放了分配的内存
return t; free(t);
,但可能会发生当我再次使用malloc时它分配相同的内存地址。但变量 z 已经指向该地址
char *z = conc(x, y);
。这会带来什么问题吗?

c memory memory-management memory-leaks malloc
1个回答
0
投票

首先,free() 命令永远不会执行,因为它是在返回之后执行的。要回答这个问题,是的,释放内存然后返回指向它的指针是错误的。通过返回指向由 malloc 分配的内存段的指针,您还将责任传递给调用者以在完成内存使用后释放内存。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.