一、代码逻辑
void fun1(char *A){
char *B = malloc(XX);
free(B);
}
void main()
{
char *A = malloc(XX);
fun1(A);
char *C = malloc(XX);
fun1(C);
fun2(A,C);
free(A);
free(C)
}
二、问题现象
1、在父函数里面,创建了一个char变量A,使用了malloc分配空间,然后将这个变量A调用子函数fun1处理。由于子函数需要,子函数里面创建了另外一个char临时变量B,使用了malloc分配空间,通过LOGD("%p",指针)分别打印分配空间的指针A、B时,A和B不一样。
2、在父函数里面,接着创建一个char变量C,使用了malloc分配空间,然后将这个变量C调用子函数fun1处理。由于子函数需要,子函数里面创建了另外一个char临时变量B,使用了malloc分配空间,通过LOGD("%p",指针)分别打印分配空间的指针C、B时,C和B不一样。但B与A一样(重点)导致A的处理结果出现异常。
三、解决办法
参考网上资料:By default, Linux follows an optimistic memory allocation strategy. This means that when malloc() returns non-NULL there is no guarantee that the memory really is available.
大致意思说malloc返回值即使不是NULL也不一定可用。
避免malloc嵌套使用,即在子函数里面使用确定的数组,不使用malloc
void fun1(char *A){
char B[128] = {0};
}