如果函数的返回值类型是一个函数内部变量的指针, 这种操作是否安全?
来源:7-6 指针参数作为返回值【通过汇编了解函数返回值机制】

慕用6042400
2024-01-26
老师, 您好。
如果我们函数返回的返回值是指针, 这种操作是否安全?比如下面的例子:
__int128 LongReturnValue(){
__int128 result = 1;
return result;
}
__int128 * LongReturnValue2(){
__int128 result = 1;
__int128 *p = &result;
return p;
}
int main(){
__int128 a1 = LongReturnValue();// 返回的值, 超过64位(当前系统是64位),则需要用两个寄存器拷贝结果。
__int128 *a2 = LongReturnValue2(); // 如果返回指针, 则指针的长度只有64位, 所以只需要一个寄存器拷贝即可。
if(a2){
printf("%#llx",*a2);
} else{
PRINT_STRING("返回的指针是空的");
}
return 0;
}
这里例子的执行结果看, 的确拿到了__int128的返回值, 并且也只需要一个寄存器拷贝, 因为指针长度是固定的。 但是, 函数执行完以后, 局部变量的内存空间会释放,是否意味着, main函数中拿到的指针, 是一个野指针?
写回答
1回答
-
没错,是野指针。局部变量的存储期就是函数内部。012024-01-26
相似问题