| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1834 人关注过本帖
标题:32位windows下可以运行的程序在64位linux下报错
只看楼主 加入收藏
gelu0
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-4-9
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:3 
32位windows下可以运行的程序在64位linux下报错
filt.c在32位windows code:blocks 10.05下运行无任何异样。
传到64位linux下,gcc -Wall filt.c -o main编译无任何错误;程序可以跑出所有结果,

windows下一样。
但是运行到free语句时报错:
typedef struct CCDS_ {
    long int start[15000], end[15000];
} CCDS;
main() {
    CCDS *ccds[25];
    for(i=1; i<25; i++) {
        if((ccds[i]=(CCDS *)malloc(sizeof(CCDS))) == NULL) {
            printf("malloc ccds failed");
            exit(1);
        }
    }
.....
    for(i=1; i<25; i++) {
        free(ccds[i]);
        ccds[i] = NULL;
    }
.....
}
*** stack smashing detected ***: ./main terminated
======= Backtrace: =========
/lib/libc.so.6(__fortify_fail+0x37)[0x7fac495431a7]
/lib/libc.so.6(__fortify_fail+0x0)[0x7fac49543170]
./main[0x400fb7]
/lib/libc.so.6(__libc_start_main+0xfd)[0x7fac49462c4d]
./main[0x400909]
======= Memory map: ========
00400000-00402000 r-xp 00000000 08:02 114164048
/home/cn2/pxd/Tibtan_BGI_calling/main
00601000-00602000 r--p 00001000 08:02 114164048
/home/cn2/pxd/Tibtan_BGI_calling/main
00602000-00603000 rw-p 00002000 08:02 114164048
/home/cn2/pxd/Tibtan_BGI_calling/main
020a8000-020c9000 rw-p 00000000 00:00 0
[heap]
7fac4922d000-7fac49243000 r-xp 00000000 08:02 7995471
/lib/libgcc_s.so.1
7fac49243000-7fac49442000 ---p 00016000 08:02 7995471
/lib/libgcc_s.so.1
7fac49442000-7fac49443000 r--p 00015000 08:02 7995471
/lib/libgcc_s.so.1
7fac49443000-7fac49444000 rw-p 00016000 08:02 7995471
/lib/libgcc_s.so.1
7fac49444000-7fac495bc000 r-xp 00000000 08:02 7995437
/lib/libc-2.11.1.so
7fac495bc000-7fac497bc000 ---p 00178000 08:02 7995437
/lib/libc-2.11.1.so
7fac497bc000-7fac497c0000 r--p 00178000 08:02 7995437
/lib/libc-2.11.1.so
7fac497c0000-7fac497c1000 rw-p 0017c000 08:02 7995437
/lib/libc-2.11.1.so
7fac497c1000-7fac497c6000 rw-p 00000000 00:00 0
7fac497c6000-7fac497e6000 r-xp 00000000 08:02 7995413
/lib/ld-2.11.1.so
7fac499d2000-7fac499d5000 rw-p 00000000 00:00 0
7fac499e1000-7fac499e5000 rw-p 00000000 00:00 0
7fac499e5000-7fac499e6000 r--p 0001f000 08:02 7995413
/lib/ld-2.11.1.so
7fac499e6000-7fac499e7000 rw-p 00020000 08:02 7995413
/lib/ld-2.11.1.so
7fac499e7000-7fac499e8000 rw-p 00000000 00:00 0
7fff53918000-7fff5392d000 rw-p 00000000 00:00 0
[stack]
7fff539ca000-7fff539cb000 r-xp 00000000 00:00 0
[vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0
[vsyscall]
已放弃
搜索更多相关主题的帖子: windows linux 
2011-04-09 11:28
faminxmu
Rank: 3Rank: 3
来 自:厦门
等 级:论坛游侠
帖 子:191
专家分:106
注 册:2008-4-23
收藏
得分:20 
本人在XP和在Linux ubuntu 2.6.24-22-generic #1 SMP  x86_64 GNU/Linux测试下面这断代码都没问题,所以可能问题出在你没列出的代码上

#include<stdio.h>
typedef struct CCDS_ {
    long int start[15000], end[15000];
} CCDS;
void main()
{
    int i;
    CCDS *ccds[25];
    for(i=1; i<25; i++) {
        if((ccds[i]=(CCDS *)malloc(sizeof(CCDS))) == NULL) {
            printf("malloc ccds failed");
            exit(1);
        }
    }
    for(i=1; i<25; i++) {
        free(ccds[i]);
        ccds[i] = NULL;
    }
}
附上本人编写的huffman编码解码的程序,里面有详细的注释
huffman.rar (94.5 KB)

如果将工程里的.cpp都改成.c那么在linux下也可以编译成功的。

[ 本帖最后由 faminxmu 于 2011-4-9 12:47 编辑 ]

在虚拟的世界中寻找目标。
2011-04-09 12:25
gelu0
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-4-9
收藏
得分:0 
回复 2楼 faminxmu
多谢!
折腾了一天终于解决了
gcc编译时加 -fno-stack-protector 即可。
也不知道为啥stack smash, 这个程序本身很普通,只是input文件非常大,达数个G;
程序本身貌似没啥错。
2011-04-09 19:59
gelu0
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-4-9
收藏
得分:0 
回复 3楼 gelu0
不好意思,问题找出来了。
定义了一个char a[8]; 给短了
sscanf(buf, "%s", a);
极少数buf里第一个字符串的长度超过了8,导致出错。
这是个不安全的操作,
貌似这个问题在windows code block下面不报错。而在gcc下报错。
2011-04-09 21:12
快速回复:32位windows下可以运行的程序在64位linux下报错
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021400 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved