免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3043 | 回复: 19
打印 上一主题 下一主题

[函数] gcc编译的C函数问题,麻烦高人指点!!! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-04-01 15:37 |只看该作者 |倒序浏览
我用GCC编写了一个C函数,有一个参数是CHAR*类型,在MAIN函数里声明了该参数为静态数组,但在子函数调用时不能访问该参数的地址(COREDUMP了),百思不得其解!
我用的GCC 2。95 操作系统SOLARIS2。6(64位的)
难道和操作系统位数有关,还是编译开关!?
请高人指点!!

论坛徽章:
0
2 [报告]
发表于 2003-04-01 15:52 |只看该作者

gcc编译的C函数问题,麻烦高人指点!!!

最好贴出你的函数声明,还有你是如何调用的,否则无法判断错误原因

论坛徽章:
0
3 [报告]
发表于 2003-04-01 16:37 |只看该作者

gcc编译的C函数问题,麻烦高人指点!!!

好吧,既然高人要求了!
...
int GetValue(char* sValue);
main()
{
char sValue[256];
int Ret;
...
  Ret=GetInfo(sValue);
}
int GetValue(char* sValue)
{
    char sTmp[256];
memset(...);
    strcpy(sTmp,"abc";

    strcpy(sValue,sTmp);  /*CORE DUMP!!!*/
    return 0;
}

不知道为什么?为什么sValue没有指向空间呢???

论坛徽章:
0
4 [报告]
发表于 2003-04-01 18:06 |只看该作者

gcc编译的C函数问题,麻烦高人指点!!!

Ret=GetInfo(sValue);
}
int GetValue(char* sValue)

getifo没有定义出来

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
5 [报告]
发表于 2003-04-02 12:46 |只看该作者

gcc编译的C函数问题,麻烦高人指点!!!

估计是写错了,GetInfo应该就是GetValue。
1、函数GetValue中,如果strcpy(sTmp,"abc"中字符串strlen("abc“)>;sizeof(sTmp),则可能会dump。

2、函数GetValue中,如果strcpy(sValue,sTmp) 中strlen(sTmp)>;sizeof(sValue),则可能会dump。

3、可以更改为strncpy或snprintf等避免dump。

论坛徽章:
0
6 [报告]
发表于 2003-04-02 14:35 |只看该作者

gcc编译的C函数问题,麻烦高人指点!!!

就你目前贴出的部份是不会引起CORE DUMP的
上面程序只有一点可能象楼上说的GetInfo是不是GetValue不过这都不会引起DUMP
CORE DUMP一般是由指针未分配内存,数组越界...
要想发现问题最好多贴全一点可能就在你未贴部份

论坛徽章:
0
7 [报告]
发表于 2003-04-02 15:19 |只看该作者

gcc编译的C函数问题,麻烦高人指点!!!

原帖由 "流浪着的鱼" 发表:
就你目前贴出的部份是不会引起CORE DUMP的
上面程序只有一点可能象楼上说的GetInfo是不是GetValue不过这都不会引起DUMP
CORE DUMP一般是由指针未分配内存,数组越界...
要想发现问题最好多贴全一点?.........



各位朋友,实在抱歉的很,本人粗心将GetValue写成了GetInfo了,该打!
因为函数长点,不想影响问题,所以现写了主要步骤!抱歉抱歉!:)
      是的,按照上面的代码不应该CORE出来!我在SCO和AIX下从没见过,这是基本用法呀!但把STRCPY(...abc)那行注释,OK!没事了!气
人!本人没用过GCC!请各位朋友多指点!

论坛徽章:
0
8 [报告]
发表于 2003-04-02 15:40 |只看该作者

gcc编译的C函数问题,麻烦高人指点!!!

另外,我试着将GetValue函数改成如下:
char* GetValue(void);
{
   char sRet[128];
   ...
   strcpy(sRet,"abc";
   return ((char*)sRet);
}
在编译时,出警告:return a local varible !
也就罢了,在MAIN中:
...
char* ps;
ps = GetValue();

操作ps,依然DUMP了!简直没办法!不知道和什么有关系,按说SOLARIS2。6(64位)也不会这样吧!GCC也不会弱到此地步吧!



调用

论坛徽章:
0
9 [报告]
发表于 2003-04-02 16:00 |只看该作者

gcc编译的C函数问题,麻烦高人指点!!!

原帖由 "sxf2000" 发表:
  ...
   strcpy(sRet,"abc";
   return ((char*)sRet);
}
在编译时,出警告:return a local varible !
也就罢了,在MAIN中:
...
char* ps;
ps = GetValue();

操作ps,依然DUMP了!简直没办法!不知道..........


这里的返回本身就是有错误的,
当然会引起core dump,
GetValue函数中声明的sRet是一个局部静态数组,
退出GetValue后就被自动释放了,
所以相应的ps也就变成一个野指针了。
再去操作的时候就可能会发生core dump。
你把静态数组换成动态malloc再返回指针试试。
BTW:
这不是gcc的问题,而是你本身的使用方法不对。

论坛徽章:
0
10 [报告]
发表于 2003-04-02 17:38 |只看该作者

gcc编译的C函数问题,麻烦高人指点!!!

说的太对了!我忘用COPY了,不该用空指针直接指向!OK,OK!
老想换个方式避免!

那为什么我用CHAR*将数组地址用参数传进去,为什么
函数里不能操作呢?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP