2015-04-22 29 views
0

在編譯我的代碼之後,我正在接收一個SEGV信號,這與未經授權的內存訪問有關。鑑於源代碼以及代碼在最近更改之前正在工作。我爲什麼收到這個信號?爲什麼我收到一個SEGV信號(C)?

注:母題的類型的返回解釋

返回字符指針文本字段部件的字符串值。這返回 值是XmNvalue資源的值的副本。如果 TextField控件字符串的長度爲0(零),則返回空字符串。

聲明:

char *str, *str1, *str2; 

上初始化:

str2 = XmTextFieldGetString(WIDGET_WITH_STRING); 

當前初始化:

str2[0] = "Group Definition"; 

例外:

(dbx) cont  
dbx: warning: Resuming only [email protected] to satisfy events that require 
automatic single-stepping 

trace: 814  if (!add_button_sensitive) 
trace: 817  str = XmTextFieldGetString(region_code_text); 
trace: 818  str1 = XmTextFieldGetString(region_name_text); 
trace: 823  str2[0] = "Group Definition"; 
[email protected] ([email protected]) signal SEGV (access to address exceeded protections) in  
region_add_mod_cb at line 823 in file "region_groups.c" 
    823  str2[0] = "Group Definition"; 
+1

'str2 [0]'的類型是char。這項任務毫無意義。 – Mat

+0

我想到了,下面是爲什麼信號:*** str2 **被聲明爲指針字符,我忘記了解引用操作符並創建了一個「指針字符數組」,並試圖爲其指定一個字符串。 – Alan

+0

嗨馬特,是的,我忘記提及我也改變了宣言。令人驚訝的是,我花了數小時試圖解決這個問題,而沒有指出源代碼的dbx。 – Alan

回答

4

str2是不是在你的代碼初始化所有,因此它可以有任何的隨機值。並且解除引用可能會導致段錯誤。

另外str2[0]char而你指定它'char *'"Group Definition",這是不正確的。你想要str2 = "Group Definition";

+0

嗨Rohan,我忘了提及,我試圖宣佈*** str2 [20] **,所以這項任務是有道理的。正如你所說,解除引用是我的問題的原因。謝謝 – Alan

+1

@Alan,不會那麼做二十個指針,你想要二十個字符。 – Rohan

+0

再次感謝,更正錯誤。 – Alan

1

將str2聲明爲 char * str2;您只需要: str2 =「組定義」

+0

謝謝弗雷德。 – Alan

相關問題