0
A
回答
5
讓我們這樣分開:
int a; /* make a an integer, assuming this is in a function on the stack */
int **b=0; /* make b a pointer to a pointer to an integer, but make it point to 0 */
*b=&a; /* store the address of a at the address pointed to by b, which is 0 */
你的IE明確寫的a
地址爲零的位置。問題不是類型兼容性,而是您試圖在零位存儲某些東西,這會導致seg故障。
要修復它這樣做:
int a; /* make a an integer, assuming this is in a function on the stack */
int *c = 0; /* make an integer pointer, initialise it to NULL */
int **b=&c; /* make b a pointer to a pointer to an integer, make it point to c */
*b=&a; /* store the address of a at the address pointed to by b, which is c */
2
乙組分的指針,則指向指針0/NULL,當你* B =要分配的值到地址0,這將在大多數操作系統死意義(在嵌入式系統中,這可以是根據有效處理器)
1
你解引用空指針。 b
指向NULL,並在下一行中取消引用它併爲其指定一個新值。
您不允許寫入您不擁有的內存,並且您是,特別是不允許寫入NULL。
-2
#include <stdlib.h>
int
main()
{
int a;
int **b = (int**)malloc(1 * sizeof(int));
*b = &a;
free(b);
return 0;
}
你*b = &a
有b[0] = &a
同樣的效果。
0
你int **b=0
是指針到int *
,被初始化爲NULL
,並在分配的存儲區未指向。當您寫入*b
時,您試圖取消引用空指針,這是非法的。
如果你要分配存儲空間,例如使用b=malloc(sizeof(*b))
,那麼您需要能夠在通過b
使用*b=&a
寫入到區域指針,因爲那時*b
將寫入到一個有效的地址。
1
你不能設置指針這樣的值(* B = &一),因爲他們是在沒有指向任何東西的時間;爲了確定他們的價值,他們必須指向某種東西。
int a;
int *tmp;
int **b = &tmp;
*b = &a; //this should work because you are setting a real variable (in this case tmp) to &a
相關問題
- 1. 指針刪除崩潰
- 2. Bada,靜態指針崩潰
- 3. Monodevelop無效指針崩潰
- 4. 指針不指向指針時發生指針崩潰
- 5. 指向指針導致崩潰
- 6. 崩潰jQuery代碼
- 7. collapsible面板崩潰代碼不崩潰
- 8. C99,C代碼
- 9. struct in6_addr在gcc上崩潰c99
- 10. 指針代碼
- 11. 崩潰使用delete []刪除指針
- 12. 指針崩潰的C程序
- 13. getMapAysnc(this)崩潰與空指針異常
- 14. 指針製作C程序崩潰
- 15. ç引用傳遞(指針)崩潰
- 16. Realloc在傳遞指針上崩潰
- 17. 內核崩潰提領一空指針
- 18. 功能範圍崩潰中的指針
- 19. 導致空指針崩潰的DialogFragment
- 20. C++指針崩潰(未初始化)
- 21. g_cache_insert()與空指針錯誤崩潰
- 22. QListWidgetItem指針導致程序崩潰
- 23. 的Android OnBootReceiver崩潰異常空指針
- 24. C指針問題,解引用崩潰
- 25. C/C++字符指針崩潰
- 26. PayPal.initWithAppID()崩潰與空指針異常
- 27. 刪除指針崩潰無效,但指針不同
- 28. 閱讀指針指針值在Android NDK中崩潰
- 29. 代碼導致崩潰(vb.net)
- 30. 爲什麼代碼崩潰?
他沒有使用C++ – ASKASK
@ASKASK語法是這個有什麼不同?我相信這個基本概念是一樣的。 – gongzhitaao
編輯你的答案,因此不具備C++,例如,刪除一切,直到第一個{和(如果你想提出這樣的想法使用malloc) –