C语言函数传递参数有关问题

C语言函数传递参数问题
本帖最后由 pzdf123 于 2015-09-17 23:23:07 编辑
请看如下代码:

函数原型:
mxml_node_t *mxmlNewElement ( 
    mxml_node_t *parent, 
    const char *name 
);


数据结构:
typedef struct _config_entry_data_t {
    config_entry_data_type_e    type;
    char                        *buffer;
    int                         len;
} config_entry_data_t;

typedef struct _config_entry_t {
    config_entry_data_t         name;
    //省略....
} config_entry_t;


现象描述: 
在某处调用,如果直接把 arry[i].name.buffer 传递给 mxmlNewElement 函数,会崩溃!!
而采用 下面代码中——被注释的 那两行的 做法时,不会崩溃!!
 //  char *p = arry[i].name.buffer;
 //  name = mxmlNewElement(table_belong, p);
     name = mxmlNewElement(table_belong, arry[i].name.buffer);


疑问:
函数参数是值传递的,直接传递  arry[i].name.buffer, 和 先 char *p= arry[i].name.buffer 、再传递 p,为何会导致不同的结果?
请解释一下原因,谢谢!

补充一下:
如果加入语句: printf("%s\n", arry[i].name.buffer);  将输出 “Name”
------解决思路----------------------
而采用 下面代码中——被注释的 那两行的 做法时,不会崩溃!!

会不会是凑巧,楼主,arry[i].name.buffer指向的空间是什么

这样会不会崩溃
char *p = NULL;  //作用是多占点栈表空间
name = mxmlNewElement(table_belong, arry[i].name.buffer);

------解决思路----------------------
结构体中的buffer只是一个指针,需要申请类存
------解决思路----------------------
这个我觉得可能是,有时候指针越界访问,如果其非法访问的地址在该程序开辟的内存区,且是可写属性,就不会报错,因为在自家院里搞破坏,不影响别人,别人也不会报警,但比较危险
------解决思路----------------------
你只是调试找错了地方,这很正常啊,
一眼看出问题,就不用调试了

加油吧