There is something wrong in My GlobelControl!

作者在使用ArcEngine的GlobeControl时遇到内存不能读的错误,并尝试通过调用AOUninitialize.Shutdown()和Marshal.ReleaseComObject来解决内存泄漏问题,但发现与Dispose函数存在冲突。

最近被ArcEngine的GlobeControl困扰,写了一个简单的使用GlobelControl的窗体,关闭时报内存不能读的错误,第一时间定位为内存泄露,调用了

ESRI.ArcGIS.ADF.COMSupport.AOUninitialize.Shutdown();


System.Runtime.InteropServices.Marshal.ReleaseComObject//而且返回引用数不会变少
使用FinalReleaseComObject返回值为零
//这个还不管用,调用之后和Dispose函数发生冲突,报RCW与COM对象分离错误,这个是咋回事呢?

如果不调用Load3DFile是没有错误的,问题还没解决

环境:win2003+VS2005+AE9.3 苦闷
这是一个经典的**哥德巴赫猜想**验证问题:任一大于2的偶数都可以写成两个素数之和。 我们要实现的是: - 输入一个偶数 $ c $($ 4 \leq c \leq 50 $) - 找到一对素数 $ a, b $,使得 $ a + b = c $ - 如果有多组解,输 **a 最小** 的那一组(即按 a 从小到大枚举,第一个满足的就是答案) - 若没有满足条件的素数对,输错误信息 --- ### ✅ 解题思路: 1. 预处理:生成 $ \leq 50 $ 的所有素数(可以用筛法或直接硬编码,但这里推荐动态判断) 2. 对每个偶数 $ c $: - 枚举 $ a $ 从最小的素数开始(如 2, 3, 5...),直到 $ a \leq c/2 $(可选优化,但题目要求 a 最小,所以必须从小开始) - 计算 $ b = c - a $ - 判断 $ a $ 和 $ b $ 是否都是素数 - 第一次找到就输并跳 3. 若遍历完都没找到,输错误提示 注意:题目中例子允许 $ a = b $,比如 `4 = 2 + 2` --- ### ✅ Python 实现代码: ```python def is_prime(n): """判断n是否是素数""" if n < 2: return False if n == 2: return True if n % 2 == 0: return False for i in range(3, int(n ** 0.5) + 1, 2): if n % i == 0: return False return True def find_prime_pair(c): """寻找两个素数 a 和 b,使得 a + b = c,且 a <= b,并返回 a 最小的一对""" for a in range(2, c): b = c - a if b < 2: continue if is_prime(a) and is_prime(b): return a, b return None # 主程序 n = int(input()) for _ in range(n): c = int(input()) pair = find_prime_pair(c) if pair: a, b = pair print(f"{c} = {a} + {b}") else: print("There is something wrong with my program!") # 每组数据之间换行 print() ``` --- ### 🔍 代码解释: - `is_prime(n)`:标准素数判断函数。 - 排除小于2的情况; - 单独处理2; - 偶数排除; - 然后只检查奇数因子到 √n。 - `find_prime_pair(c)`: - 从 `a=2` 开始递增尝试; - 因为要找 `a` 最小的解,所以一旦找到合法组合立即返回; - 不需要对称重复搜索。 - 输格式严格按照 `"c = a + b"`; - 每组输后加一个空行(根据“每组数据之间换行”)。 --- ### ✅ 示例输入输: **输入:** ``` 3 4 6 8 ``` **输:** ``` 4 = 2 + 2 6 = 3 + 3 8 = 3 + 5 ``` > 注意最后也有一个换行(每组之间换行) --- ### 📌 特殊情况说明: 虽然在 $ c \leq 50 $ 范围内,**所有大于等于4的偶数都能分解为两个素数之和**(这是已被验证的事实),所以理论上不会现输错误提示的情况。 但题目要求:“如果没有满足条件的输错误”,所以我们保留这个逻辑以防未来扩展。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值