免费注册 查看新帖 |

Chinaunix

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

c程序在hp-ux 11.23 ia64环境下发生的怪问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-04-24 13:48 |只看该作者 |倒序浏览
小弟在一台rx2620上正常编译运行的一段socket程序,移植到相同环境的rx3640上,编译没问题,运行时coredump,用gdb分析core,显示printf的一行出错,信息是收到信号11。用tusc调试,发现程序根本没装载完成就溢出了。但把这个在3640上出错的程序原样rcp到2620上,就没问题。请高手不吝赐教,谢谢。

PS:小弟用HP-UX不久,不太了解看版本、补丁的命令,用uname -a看了一下,
3640:HP-UX zxxg4 B.11.23 U ia64 3336025618 unlimited-user license
2620:HP-UX txxxp B.11.23 U ia64 1823431148 unlimited-user license
不知道这个小版本的差别是否会导致上述的问题,请高人指点。

感激涕零

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
2 [报告]
发表于 2007-04-24 14:20 |只看该作者
原帖由 sdjnzhoumq 于 2007-4-24 13:48 发表
小弟在一台rx2620上正常编译运行的一段socket程序,移植到相同环境的rx3640上,编译没问题,运行时coredump,用gdb分析core,显示printf的一行出错,信息是收到信号11。用tusc调试,发现程序根本没装载完成就溢出 ...

多给点有用信息吧,例如说出错的代码段啥的。

论坛徽章:
0
3 [报告]
发表于 2007-04-24 14:35 |只看该作者
$ cat cctst.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/nameser.h>
#include <resolv.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#define MAXDATASIZE 10*2048*2048 /*每次最大数据传输量 */
main(int argc, char **argv)
{
        int sockfd, recvbytes,iconn,portno;
        char buf[MAXDATASIZE],*p;
        struct hostent *host;
        struct sockaddr_in serv_addr;
        if (argc < 2)
        {
                printf("Please enter the server's hostname!\n");
                exit(1);
        }
        if((host=gethostbyname(argv[1]))==NULL)
        {
                printf("gethostbyname出错!\n");
                exit(1);
        }
        if((portno=atoi(argv[2]))==NULL)
        {
                printf("port出错!\n");
                exit(1);
        }
        if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
        {
                printf("socket创建出错!\n");
                exit(1);
        }
        serv_addr.sin_family=AF_INET;
        serv_addr.sin_port=htons(portno);
        serv_addr.sin_addr = *((struct in_addr *)host->h_addr);
        bzero(&(serv_addr.sin_zero),8);
CONN:
        if (connect(sockfd, (struct sockaddr *)&serv_addr,sizeof(struct sockaddr
)) == -1)
        {
                printf("connect出错!\n");
                close(sockfd);
                exit(1);
        }

        iconn=0;
        while(1)
        {
                if ((recvbytes=recv(sockfd, buf, MAXDATASIZE, 0)) <=0 )
                {
                        printf("recv出错!\n");
                        iconn++;
                        if(11==iconn)
                        {
                                close(sockfd);
                                goto CONN;
                        }
                        continue;
                }
                buf[recvbytes] = '\0';

                p=(char *)buf;
                while(*p!='\0')
                {
                        if(*p=='\x0d')
                                strcpy(p,p+1);
                        p++;
                }
                printf("%s",buf);
                fflush(0);
        }
}
$

[[i] 本帖最后由 sdjnzhoumq 于 2007-4-24 14:37 编辑 [/i]]

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
4 [报告]
发表于 2007-04-24 15:09 |只看该作者
原帖由 sdjnzhoumq 于 2007-4-24 14:35 发表
$ cat cctst.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/nameser.h>
#include <resolv.h>
#include ...
多给点有用信息吧,

虽然我讨厌重复……

论坛徽章:
0
5 [报告]
发表于 2007-04-24 16:36 |只看该作者

用ldd xxx比较以下看看依赖那个库;

我怀疑是依赖库有问题,是不是32位和64库链接了,
用ldd看看链接了什么库;

论坛徽章:
0
6 [报告]
发表于 2007-04-25 09:47 |只看该作者
原帖由 sdjnzhoumq 于 2007-4-24 14:35 发表
$ cat cctst.c
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/nameser.h>
#include <resolv.h>
#include ...



我猜你需要按
ulimit -a 看一下
在栈上分配 2048 * 2048 * 10 = 40M? 一般的系统会禁止的

你可以
1, 调大stack限制
2, 改成全局的一个数组(或者malloc)

论坛徽章:
0
7 [报告]
发表于 2007-04-25 10:06 |只看该作者
原帖由 ivhb 于 2007-4-25 09:47 发表



我猜你需要按
ulimit -a 看一下
在栈上分配 2048 * 2048 * 10 = 40M? 一般的系统会禁止的

你可以
1, 调大stack限制
2, 改成全局的一个数组(或者malloc)


是的,IA64平台上用户栈只有8M。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP