0

上下文化,在编译我的代码后,我收到一个 SEGV 信号,这与未经授权的内存访问有关。鉴于来源和代码在最近的更改之前工作。为什么我会收到这个信号?

注意:Motif 的类型返回解释

返回指向 TextField 小部件的字符串值的字符指针。此返回值是 XmNvalue 资源值的副本。如果 TextField 小部件字符串的长度为 0(零),则返回一个空字符串。

宣言:

char *str, *str1, *str2;

之前的初始化:

str2 = XmTextFieldGetString( WIDGET_WITH_STRING ); 

当前初始化:

str2[0] = "Group Definition";

例外:

(dbx) cont      
dbx: warning: Resuming only t@1 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";
t@1 (l@1) 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";
4

2 回答 2

4

str2在您的代码中根本没有初始化,因此它可以具有任何随机值。并且取消引用它可能会导致段错误。

同样str2[0]char在您为其分配 'char *'"Group Definition"时,这是不正确的。你想要str2 = "Group Definition";吗?

于 2015-04-22T08:28:58.397 回答
1

将 str2 声明为 char *str2; 你只需要: str2 = "组定义"

于 2015-06-03T21:13:25.793 回答