指针常遇到的问题

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/maoliran/article/details/51953255

指针是个涉及到内存,很容易产生bug的根源,总结了几点指针容易出错的问题:

1、对于多级指针,不要在多个函数中分配内存空间,例如:

void func(char** p){
    for(int i = 0; i < 5; i++){
        p[i] = (char*)malloc(sizoef(char) * 100);
    }
}

int main(){
    char** p = NULL;
    p = (char**)malloc(sizeof(char*) * 10);
}

上面这段代码就是现在main函数中对p指向的空间开辟了一段内存,然后又在func函数中开辟了二级内存,这样在项目开发中是坚决不能出现的,难于维护,难于维护,难于维护,重要的事情说三遍。因为不好释放内存,在main中或者func中释放都不合适。

2、判断内存是否分配成功

若内存没有分配成功,就去操作自以为分配成功的内存,一操作就绝对down掉

3、不能操作NULL空间

跟第二条类型,在操作指针所指向的内存空间时一定要判断是否为NULL,NULL空间时系统保护的内存空间,不准用户操作

4、内存泄漏

这个就不用说了,初学者常犯的错误,总忘记释放内存,另外重点是可能一段代码中分配好几段内存,前面都申请成功了,后面有一个申请失败,那么前面申请的都要释放掉再进行后面的操作或者处理,否则就内存泄漏了。

5、野指针

野指针也是个初学者常犯的错误,释放完内存空间后,一定要让指针指向NULL,否则就变成野指针了,这个就不用说了。

6、(*p)++ 与 *p++

一定要区分(*p)++ 与 *p++两者的区别,一个是指针指向的内存空间里的值加1,一个是指针的地址加1。这也是经常出现bug的一个地方。

展开阅读全文

遇到的错误

09-25

import java.awt.*;rnimport java.sql.*;rnrnclass JDBCtest extends Framernrn TextArea mytextarea;rn rn public void JDBCtest()rn rn super("一个简单的JDBC范例");rn setLayout(new FlowLayout());rn mytextarea=new TextArea(30,80);rn add(mytextarea);rn resize(500,500);rn show();rn mytextarea.appendText("正在查询中,请稍后....\n");rn rn public void DisplayResults(ResultSet results) throw SQLExceptionrn rn ResultSetMetaData resultsetmetadata=results.getMetaData();rn rn int cols=resultsetmetadat.getColumnCount();rn rn mytextarea.setText("");rn rn while(results.next())rn rn for(i=1;i<=cols;i++)rn rn if(i>1)rn mytextarea.appendText("\t");rn tryrn rn mytextarea.appendText(results.getstring(1));rn rn rn catch(NullPointerException e)rn rn rn rn rn mytextarea.appendText("\n");rn rn rnrnrnpublic boolean handleEvent(Event evt)rnrn if (evt.id==Event.WINDOW_DESTROY)rn rn System.exit(0);rn return true;rn rn return handlEvent(evt);rnrnrnpublic static void main(String argv[]) throw SQLException,Exceptionrnrn String queryString="select * from Customers";rn rn JDBCtest myjdbctest=new JDBCtest();rn rn Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");rn rn Connection myConn=DriverManager.getConnection("jdbc.odbc.Northwind","administrator","");rn rn Statement mystmt=myConn.createStatement();rn rn ResultSet myresultset=mystmt.executeQuery(queryString);rn rn myjdbctest.DisplayResults(myresultset);rn rn myresultset.close();rn mystmt.close();rn myConn.close();rnrn错误如下:rnC:\itfuture\jdbc\JDBCtest.java:18: ';' expectedrn public void DisplayResults(ResultSet results) throw SQLExceptionrn ^rnC:\itfuture\jdbc\JDBCtest.java:47: 'class' or 'interface' expectedrnpublic boolean handleEvent(Event evt)rnrn18行应该是rnpublic void DisplayResults(ResultSet results) throw SQLExceptionrn怎么会缺少";"呢,这是个什么错误,在写别的程序时,经常遇到这个问题,这是怎么产生的?rn第二个错误又是怎么产生的,什么原因? 论坛

没有更多推荐了,返回首页