本文讨论一些常见的mysqlc api 程序设计错误,以及如何避免其发生(这些问题在mysql邮件清单中会周期性地突然出现).
我们已经通过传递null 参数调用了mysql_ i n i t ( ),这就是让它分配并且初始化mysql 结构,然后返回一个指针.另外一种方法是将指针传递到一个已有的mysql 结构中.在这种情况下, mysql_init() 会将结构初始化并返回一个指针,而不必自己分配结构.如果要使用第二种方法,则要小心会出现一些微妙的问题.下面的讨论指出了需要注意的一些问题.如果将一个指针传递给mysql_ init( ),它应该实际指向某些东西.看下面的代码段: 【程序编程相关:选用单防火墙DMZ还是双防火墙DMZ】
1. 错误1——使用未初始化的连接处理程序指针 【推荐阅读:统一威胁管理设备很快将取代现有的防火墙设】
这个问题是,mysql_init() 得到了一个指针,但指针没有指向所知的任何地方.conn 是一个局部变量,因此在main() 开始执行时它是一个能指向任何地方的未初始化的存储器,这就是说mysql_init() 将使用指针,并可在内存的一些任意区域滥写.如果幸运的话, conn 将指向您的程序地址空间的外部,这样,系统将立即终止,使您能尽早意识到代码中出现的问题. 【扩展信息:全面分析防火墙及防火墙的渗透(1)】560)this.style.width=560; onmousewheel = javascript:return big(this) height=114 src="/files/uploadimg/20051129/1650040.jpg" width=214>如果不幸的话, conn 将指向程序中以后才使用的一些数据的内部,直到再次使用那个数据时才发现问题.因此实际出现问题的地方远比执行程序时出现的问题多,也更难捕捉到.... 下一页