- 论坛徽章:
- 24
|
本帖最后由 一介村夫 于 2012-03-01 10:46 编辑
目前是19:1,够了。
我来公布来龙去脉吧,看看是不是像某些人说的似的“闲得蛋疼”。
以下是伪代码:- int main(int argc, char *argv[])
- {
- l = dlopen("3rdPartyLib");
- f = dlsym(l, "EnterEnv");
- (*f)();
- ...
- f = dlsym(l, "LeaveEnv");
- (*f)();
- dlclose(l);
- return 0;
- }
复制代码 此程序在exit时产生core dump,原因估计是在3rdPartyLib的EnterEnv中使用了atexit。
我们知道,擦干净自己的屁股是一种良好的编程习惯,但是本例恰恰是因为屁股擦得太干净了,所以才会产生core dump。
解决方法是:用_exit代替return,因为自己的屁股已经擦干净了,没必要再画蛇添足。
由此引发的思考是:如果我们能够确保自己的编程达到了一定的水平,屁股肯定已经擦干净了,是否应该把_exit作为一种缺省的退出main的方式?尤其是当你动态调用了第三方的黑匣子时。 |
|