这段时间不忙, 把以前的笔记, 写代码中遇到的问题, 写道这里, 方便自己管理, 也希望多大家有所帮助。
前几天,写代码中。发现在第一个函数的调用结束, 再调用第二个函数时,程序运行不正常了, 不知道跳到哪去了,经过 trace 发现都没进入到第二个函数, 猜想应该是堆栈溢出了。 经过下面的调试,发现了问题所在;
1) 查看传给第二个函数的参数是不是太大了。 将传给第二个函数的参数,设置成 ""; 再运行还是出现同样的问题。 应该不是参数的问题。
2) 仔细分析第二个函数的代码, 发现有需要分配一个128k局部buffer, 将这个buffer,改完全局的, 再运行, 程序正常了。 应该是这个局部缓冲,把堆栈弄崩溃了。
鉴于上述, 建议大家写代码,
1) 尤其是开发第三方软件,或者不能确定传给函数的参数大小时, 函数的参数类型如果时字符串时, 尽量用引用或指针,
2) 大的缓冲,尽量new 出来, 不要在栈里分配, 尤其函数嵌套调用太多时。
前几天,写代码中。发现在第一个函数的调用结束, 再调用第二个函数时,程序运行不正常了, 不知道跳到哪去了,经过 trace 发现都没进入到第二个函数, 猜想应该是堆栈溢出了。 经过下面的调试,发现了问题所在;
1) 查看传给第二个函数的参数是不是太大了。 将传给第二个函数的参数,设置成 ""; 再运行还是出现同样的问题。 应该不是参数的问题。
2) 仔细分析第二个函数的代码, 发现有需要分配一个128k局部buffer, 将这个buffer,改完全局的, 再运行, 程序正常了。 应该是这个局部缓冲,把堆栈弄崩溃了。
鉴于上述, 建议大家写代码,
1) 尤其是开发第三方软件,或者不能确定传给函数的参数大小时, 函数的参数类型如果时字符串时, 尽量用引用或指针,
2) 大的缓冲,尽量new 出来, 不要在栈里分配, 尤其函数嵌套调用太多时。