2013-11-01 78 views
-2

我想發送一個指針指向函數中的指針ptr。 ptr閱讀指針指針值在Android NDK中崩潰

int ret = funcptrptr(unsigned char** ptr); 

裏面funcptrptr()我分配一個新的信息值給ptrptr。我甚至打印的內容和它似乎是打印

在這個函數調用返回正在嘗試取消引用ptrptr至P像下面,

unsigned char* p = *ptr; 

這與SIGEGV崩潰。爲什麼?

內funcptrptr()的代碼,去一些這樣的事

*ptrptr = u_build_value(crypted_vector,random_vector); 

內部功能u_build_value其實我分配使用malloc和返回回的內容unsigned char型*

======== =

該解決方案將內存分配給ptrptr變量,如下面某個人所指出的那樣。有效。謝謝 。

+0

它與SIGEGV崩潰。這是在Android NDK上。糾正錯別字 – rana

+0

你爲什麼投票下來。你能解釋一下爲什麼?如果你不是專家,那麼爲什麼投票下來 – rana

+0

由於你沒有展示足夠的代碼,這意味着我們不能真正告訴你想要繼續,所以你不能回答你的問題,你會得到低投入。這很可能很快就會因此而關閉。 –

回答

2

假設你沒有做任何調用u_build_value之前,您嘗試取消引用不指向任何關於此行的指針:

*ptrptr = u_build_value(crypted_vector,random_vector); 
^here your are dereferencing a pointer causing undefined behaviour 

你的代碼更改爲:ptrptr = u_build_value(crypted_vector,random_vector);或分配一些內存ptrptr如果你想解除引用它。

+0

我實際上在u_build_value中分配一個內存並返回內容並將其分配給我的* ptrptr。 – rana

+0

我編輯過。 u_build_value返回一個無符號字符*。所以我沒有做錯任何事情。我不知道我錯在哪裏 – rana

+1

@rana這裏:'* ptrptr'看看'*'並思考它做了什麼。 – John