C++中两个指针指向同一内存,如何防止内存被破坏

博客主要提及智能指针,在使用智能指针时,需要进行地址判断,查看是否指向同一地址。

1,智能指针

2,在使用时,进行地址判断是否指向同一地址。

在C/C++中,可以让两个的函数指针指向同一个函数(即相内存地址),但不能让它们指向的函数但引用同一内存,因为函数指针本身存储的是函数的入口地址,而不是可修改的内存数据。 ### 方法: 1. **直接赋值** 让两个函数指针指向同一个函数: ```c void func1() { printf("Function 1\n"); } void func2() { printf("Function 2\n"); } int main() { void (*ptr1)() = func1; // ptr1 指向 func1 void (*ptr2)() = func1; // ptr2 也指向 func1 ptr1(); // 输出 "Function 1" ptr2(); // 输出 "Function 1" return 0; } ``` 2. **通过强制类型转换** 如果两个函数指针类型不,但仍想指向同一个函数: ```c typedef void (*FuncPtr1)(); typedef int (*FuncPtr2)(int); void target_func() { printf("Target Function\n"); } int main() { FuncPtr1 ptr1 = target_func; FuncPtr2 ptr2 = (FuncPtr2)ptr1; // 强制类型转换 ptr1(); // 合法调用 // ptr2(0); // 危险!可能引发未定义行为(UB) return 0; } ``` **注意**:强制转换可能导致调用时参数不匹配,进而引发未定义行为(UB)。 3. **通过共用函数指针数组** 如果希望多个指针引用同一个动态分配的函数指针: ```c void (**shared_ptr)() = malloc(sizeof(void(*)())); *shared_ptr = func1; void (*ptr1)() = *shared_ptr; void (*ptr2)() = *shared_ptr; ptr1(); // 调用 func1 ptr2(); // 调用 func1 free(shared_ptr); ``` ### 关键点: - 函数指针存储的是代码段的地址,而非堆/栈内存。 - 无法让两个函数指针指向同一内存”但不函数,因为函数地址是编译期确定的。 - 强制类型转换可能绕过类型检查,但调用时需严格匹配原函数签名。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值