变量 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);
。这会带来什么问题吗?
首先,free() 命令永远不会执行,因为它是在返回之后执行的。要回答这个问题,是的,释放内存然后返回指向它的指针是错误的。通过返回指向由 malloc 分配的内存段的指针,您还将责任传递给调用者以在完成内存使用后释放内存。