導航:首頁 > 軟體知識 > 程序中如何追蹤空指針

程序中如何追蹤空指針

發布時間:2022-11-18 00:56:10

❶ 以下Java程序空指針異常的原因解釋(寫原因)

for
(int
index
=
0;
index
<
50;
index++)
{
在這個循環加一個判斷你數組50個肯定沒用完當你循環到空的時候當然報空指針了
加一個判斷
if(ds.name[index]==null)
{
break;
}

❷ 關於linux中空指針的問題

這個問題,實際上在今天的JulianTec adil 郵件列表中有人問到了。 yihe chen 給出了答案:

這個問題得從指針說起。。

C語言裡面的指針可以指向任何有效的數據,也可以
不指向任何東西;這後者即所謂的NULL指針。

指向有效數據的時候,對它使用*做dereference操作
就可以取出數據來了;但是對不指向任何數據的指針
來進行*操作肯定就沒什麼意義了,對吧?這其實是個
bug。

在現代的操作系統設計中,為了消除程序裡面的這種
bug,故意分配一個專門的不能訪問的內存頁,然後
將NULL指針安排在裡面。這樣當程序員不小心在自己
的程序中寫下對NULL指針的提領操作後,系統運行時
就會報錯。

在windows和linux中,這樣的內存頁被設計者安排在
0地址開始對應的那個頁上。實際上,這個頁面裡面
的任何地址都是不能被提領的。*((char *)0) 不可以,
*((char *)0x12)之類的地址也不可以。

很多人認為NULL指針其實就是指向0地址的指針,實際
上這是不準確的。雖然很少見,但也有處理器架構將
NULL指針安排在非零地址起始的頁面內。所以為了程
序的可移植性,在需要使用NULL指針的時候,用null
而來不用0值來初始化指針變數。

你可以訪問這里的歸檔:http://www.juliantec.info/mlist/archives/index.html
但是今天的,沒這么快歸進去,你可以訪問這里的記錄:
http://www.freelists.org/post/juliantec_list/char-0,1

❸ java程序報空指針異常

沒空細看,但有一處明顯錯誤:
if(f.getName().endsWith(".java"));
這里的f應該是f1.
授人以魚,不如授人以漁。我沒空幫你仔細檢查程序,但是可以教你怎麼解決類似的錯誤:
你看一下報錯的地方在哪裡,在它前一行設個斷點,然後使用debug模式運行,跟蹤看一下變數值,這樣就能很清楚錯誤的原因了。這是編程最基本最常用的知識,一定要學會掌握。這樣以後就不用老求人家給你看代碼查錯誤了。

❹ 安卓做簡訊程序是總報空指針異常

setContentView(R.layout.helper),讀入xml配置文件時候可能有初始化失敗的,產生了空指針,建議step進去追蹤一下!

❺ 各位朋友好!oracle 異常錯誤堆棧跟蹤 java.lang.NullPointerException 請問如何解決才好呢謝謝了。

NullPointerException 這個異常在開發過程中最常見的幾個之一,也就是所謂的空指針異常,怎麼說呢,也就是你到這里的時候用到這個對象,但是這個對象沒有被創建是空的所以會拋出異常。解決的辦法1.你可以打上斷點用MyEclipse的Debug功能來逐步跟蹤調試,也可以再你程序裡面加上System.out.println();來列印,看看是那裡空了。

❻ 什麼是空指針異常

所謂的空指針異常,就是一個指針是空指針,你還要去操作它,既然它指向的是空對象,它就不能使用這個對象的方法。比如上面的s假如為null,你還要用s的方法,比如s.equals( String x);那麼就會產生空指針異常。

產生空指針異常的原因:

(1) 當一個對象不存在時又調用其方法會產生異常    obj.method() // obj對象不存在 

(2) 當訪問或修改一個對象不存在的欄位時會產生異常    obj.method()  // method方法不存在

(6)程序中如何追蹤空指針擴展閱讀:

空指針正常工作意義:

在許多語言,這不是一個單獨的轉義序列,而是八進制轉義序列,單個八進制數字為0;因此,『』不能跟隨任何數字0通過7;否則它被解釋為更長的八進制轉義序列的開始。被在使用中發現各種語言的其他轉義序列00,x00,z,或的Unicode表示u0000。

表示空字元的能力並不總是意味著生成的字元串將被正確解釋,因為許多程序將認為null作為字元串的結尾。因此,鍵入它的能力(在未經檢查的用戶輸入的情況下)會創建一個稱為空位元組注入的漏洞,並可能導致安全漏洞。

空字元以逗號表示是^@。在Windows上,可以通過按住Ctrl鍵,然後按@(這通常需要同時按下⇧ Shift並按下數字2鍵)。

參考資料:網路——空指針

❼ 訪問一個空指針的程序怎麼寫,求解急!!!!!

main()
{
int *i = NULL;

*i = 0;// 這就是訪問空指針,但是會引起內存訪問錯誤!!!
}

❽ java編寫一個能夠產生空指針異常的程序,並將其捕獲在控制台輸出異常信息,要這個代碼

一、空指針異常產生的主要原因如下:

1、當一個對象不存在時又調用其方法會產生異常obj.method() // obj對象不存在;

2、當訪問或修改一個對象不存在的欄位時會產生異常obj.method() // method方法不存在;

3、字元串變數未初始化;
4、介面類型的對象沒有用具體的類初始化。

二、實現思路:

1、利用空指針異常的表現之一:對空字元串進行操作。

2、設置一個空的字元串,然後對其進行查找操作(可以使用charAt()方法)

3、對將要出現的異常進行捕獲

4、列印到控制台

//java代碼
{

/**
*實現思路:
*1.空指針異常的表現之一:對空的字元串進行了操作
*2.設置一個空的字元串,然後對其進行查找操作(可以使用charAt()方法)
*3.對將要出現的異常進行捕獲
*4.列印到控制台
**/
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub

//定義一個空的字元串
Stringstr=null;

//嘗試對空字元串進行操作,並捕獲異常,輸出異常
try{
System.out.println(str.charAt(0));
}catch(Exceptione){
System.out.println("異常信息:");
e.printStackTrace();
}
}

}

運行結果圖:

程序開發過程中的空指針異常會經常出現,要盡量保持邏輯清晰,能夠及時排查錯誤代碼,對可能發生的異常進行捕獲,不要影響主程序運行。

❾ java中的空指針異常怎麼解決

原文:https://www.hu.com/question

你這個問題的解決

問題定位:

在堆棧異常信息的第一行就可以定位到是哪裡出了空指針,倘若這里不是你寫的類,可以往下翻一下,找到你寫的類,就是這里出現的空指針。

問題解決:

對一個空對象調用裡面的方法或者屬性的時候會報空指針,檢查這個對象為什麼是空即可。

Java 空指針異常的若干解決方案

Java 中任何對象都有可能為空,當我們調用空對象的方法時就會拋出 NullPointerException 空指針異常,這是一種非常常見的錯誤類型。我們可以使用若干種方法來避免產生這類異常,使得我們的代碼更為健壯。本文將列舉這些解決方案,包括傳統的空值檢測、編程規范、以及使用現代 Java 語言引入的各類工具來作為輔助。

運行時檢測

最顯而易見的方法就是使用 if (obj == null) 來對所有需要用到的對象來進行檢測,包括函數參數、返回值、以及類實例的成員變數。當你檢測到 null 值時,可以選擇拋出更具針對性的異常類型,如 IllegalArgumentException,並添加消息內容。我們可以使用一些庫函數來簡化代碼,如 Java 7 開始提供的 Objects#requireNonNull 方法:

public void testObjects(Object arg) {
Object checked = Objects.requireNonNull(arg, "arg must not be null");
checked.toString();}

Guava 的 Preconditions 類中也提供了一系列用於檢測參數合法性的工具函數,其中就包含空值檢測:

public void testGuava(Object arg) {
Object checked = Preconditions.checkNotNull(arg, "%s must not be null", "arg");
checked.toString();
}

我們還可以使用 Lombok 來生成空值檢測代碼,並拋出帶有提示信息的空指針異常:

public void testLombok(@NonNull Object arg) {
arg.toString();

生成的代碼如下:

public void testLombokGenerated(Object arg) {
if (arg == null) {
throw new NullPointerException("arg is marked @NonNull but is null");
}
arg.toString();
}

這個註解還可以用在類實例的成員變數上,所有的賦值操作會自動進行空值檢測。

編程規范

·通過遵守某些編程規范,也可以從一定程度上減少空指針異常的發生。

使用那些已經對 null 值做過判斷的方法,如 String#equals、String#valueOf、以及三方庫中用來判斷字元串和集合是否為空的函數:

if (str != null && str.equals("text")) {}
if ("text".equals(str)) {}

if (obj != null) { obj.toString(); }
String.valueOf(obj); // "null"

// from spring-core
StringUtils.isEmpty(str);
CollectionUtils.isEmpty(col);
// from guava
Strings.isNullOrEmpty(str);
// from commons-collections4
CollectionUtils.isEmpty(col);

·如果函數的某個參數可以接收 null 值,考慮改寫成兩個函數,使用不同的函數簽名,這樣就可以強制要求每個參數都不為空了:

public void methodA(Object arg1) {
methodB(arg1, new Object[0]);
}

public void methodB(Object arg1, Object[] arg2) {
for (Object obj : arg2) {} // no null check
}

·如果函數的返回值是集合類型,當結果為空時,不要返回 null 值,而是返回一個空的集合;如果返回值類型是對象,則可以選擇拋出異常。Spring JdbcTemplate 正是使用了這種處理方式:

// 當查詢結果為空時,返回 new ArrayList<>()
jdbcTemplate.queryForList("SELECT * FROM person");

// 若找不到該條記錄,則拋出
jdbcTemplate.queryForObject("SELECT age FROM person WHERE id = 1", Integer.class);

// 支持泛型集合
public <T> List<T> testReturnCollection() {
return Collections.emptyList();
}

靜態代碼分析

Java 語言有許多靜態代碼分析工具,如 Eclipse IDE、SpotBugs、Checker Framework 等,它們可以幫助程序員檢測出編譯期的錯誤。結合 @Nullable 和 @Nonnull 等註解,我們就可以在程序運行之前發現可能拋出空指針異常的代碼。

但是,空值檢測註解還沒有得到標准化。雖然 2006 年 9 月社區提出了 JSR 305 規范,但它長期處於擱置狀態。很多第三方庫提供了類似的註解,且得到了不同工具的支持,其中使用較多的有:

❿ C語言中,空指針的使用意義是什麼在編程中使用空指針會帶來什麼影響

閱讀全文

與程序中如何追蹤空指針相關的資料

熱點內容
全國版權交易平台有多少家 瀏覽:928
學信網信息補充哪個學校怎麼填 瀏覽:319
地產營銷代理是什麼 瀏覽:235
個體商戶的委託代理人是什麼人 瀏覽:516
國產紅酒怎麼代理 瀏覽:609
開學報到個人信息怎麼填 瀏覽:12
乾洗技術學什麼好 瀏覽:609
中山大學的電子信息類是學什麼的 瀏覽:658
最細市場上米線是什麼樣 瀏覽:724
青海有哪些農牧產品 瀏覽:654
濟南紡織市場搬去哪裡 瀏覽:418
代理人員的責任有哪些 瀏覽:305
職高和職業技術哪個好 瀏覽:573
芒果市場上一斤多少錢 瀏覽:477
怎麼在程序和功能上刪掉橘子 瀏覽:958
碳排放權上線交易什麼意思 瀏覽:229
熟食市場怎麼打開 瀏覽:371
怎麼選產品爆款 瀏覽:741
打了疫苗後為什麼查不到信息 瀏覽:731
微信有了小程序怎麼退出 瀏覽:444