社区
工具平台和程序库
帖子详情
同一个C程序在linux和win下表现不一致
john
2008-12-19 09:13:20
一个C语言编写的PCM音频编码/解码程序,仅仅使用的C的函数,没有使用任何与OS特别相关联的特别函数。在Linux下(用cc或gcc)编译、执行均正确无误。在win下用Dev-C++编译无误,但执行结果确不正确。
请问:在同样的CPU平台下,Linux的C语言,与Win下的Dev-C++环境的C语言,在语言的定义上,(例如标准类型的长度,数据存储的顺序等方面)是否有所不同?
...全文
355
19
打赏
收藏
同一个C程序在linux和win下表现不一致
一个C语言编写的PCM音频编码/解码程序,仅仅使用的C的函数,没有使用任何与OS特别相关联的特别函数。在Linux下(用cc或gcc)编译、执行均正确无误。在win下用Dev-C++编译无误,但执行结果确不正确。 请问:在同样的CPU平台下,Linux的C语言,与Win下的Dev-C++环境的C语言,在语言的定义上,(例如标准类型的长度,数据存储的顺序等方面)是否有所不同?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
19 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
smallqiang0
2009-01-01
打赏
举报
回复
ding...
smallqiang0
2009-01-01
打赏
举报
回复
ding...
john
2008-12-31
打赏
举报
回复
程序中使用的类型主要是double。将程序在:
Soalris gcc
Ubuntu(linux)gcc
WIN DEV C++
WIN VC6
运行主观比较:前三者还原出的声音正常。VC6声音失真比较严重。
具体误差在那个细节上,没有功夫搞了。
intel C++ 没有测试。
xtdumpling
2008-12-30
打赏
举报
回复
o,学习
john
2008-12-29
打赏
举报
回复
UNIX文件不区分text & binary,处理时候不用计较文件类型。
WIN则text & binary“很计较”。故在WIN下用text读&写“数值”,则全乱了套了。
读出的数值不对,以此去分配内存,自然不对了。
另外发现一个副产品:
这个语音压缩&解码程序,用VC,声音还原不符合要求,结果很难听。用DEV,结果声音好听且符合要求。
同一个程序,结果咋就那么大呢?原因是VC的计算精度太差了。 当然调试方便,一俊遮百丑。
hhyttppd
2008-12-29
打赏
举报
回复
up,接分
HEAP[Project1.exe]: Invalid allocation size - f3333360 (exceeded 7ffdefff)
First-chance exception in Project1.exe: 0xC0000005: Access Violation.
呵呵,我怎么觉得是new的尺寸太大了啊,这个应该编译的时候就报错,不会等到执行。
john
2008-12-29
打赏
举报
回复
问题解决了。是它们读写文件不同。
threeleafzerg007
2008-12-29
打赏
举报
回复
[Quote=引用 13 楼 JohnPhan 的回复:]
UNIX文件不区分text & binary,处理时候不用计较文件类型。
WIN则text & binary“很计较”。故在WIN下用text读&写“数值”,则全乱了套了。
读出的数值不对,以此去分配内存,自然不对了。
另外发现一个副产品:
这个语音压缩&解码程序,用VC,声音还原不符合要求,结果很难听。用DEV,结果声音好听且符合要求。
同一个程序,结果咋就那么大呢?原因是VC的计算精度太差了。 当然调试方便,一俊遮百丑。
[/Quote]
的确,Unix所有输入文件都当作字节流处理,Windows 区分字节流 还是 二进制(最好用 fread fwrite),顶一下!
tobylee999
2008-12-29
打赏
举报
回复
呵,N年前遇到过这种情况,不是文本永远不要用TXT去操作~
DEV计算精度比VC好?学习了~
john
2008-12-22
打赏
举报
回复
怀疑:
类型的缺省长度不同。
运算符号的缺省优先级处理不同。
缺省的预先分配内存不同。
对C的副作用,处理上有所不同。
john
2008-12-22
打赏
举报
回复
目前的最新进展报告给大家,供大家批评指正,因为这个现象如果普遍存在,确实是个问题。
在WIN2K下调试结果如下:
Visual C++ Debug 执行时,程序弹出:
Unhandled exception in Project1.exe:0xC0000005:Access Violation
Debug窗口提示是:
....
HEAP[Project1.exe]: Invalid allocation size - f3333360 (exceeded 7ffdefff)
First-chance exception in Project1.exe: 0xC0000005: Access Violation.
....
Dev-C++ Debug执行时,程序弹出:
Warning
An Access Violation (Segmentation Fault) raised in your program
问题都指向了这个函数:
addwvec(length, nvec, weight, vec, out)
int length, nvec;
double *weight, *vec, *out;
{
int k, j;
for (k = 0; k < length; ++k)
out[k] = *weight * *vec++;
for (j = 1; j < nvec; ++j) {
++weight;
for (k = 0; k < length; ++k)
out[k] += *weight * *vec++;
}
return;
}
现在的问题反而成了,这样一个函数为何能在Linux下正确的执行?
invaliddescriptor
2008-12-21
打赏
举报
回复
ding
qap22
2008-12-21
打赏
举报
回复
ding
john
2008-12-21
打赏
举报
回复
在VC6下,程序也编译通过,运行也同DEV-C++一样。运行结果不对(程序异常终止)。
谢谢“once_and_again”的提醒。“once_and_again”可否再多说几个字?
john
2008-12-19
打赏
举报
回复
也怀疑在:“函数带有运算的参数”这一点上,可能是有所不同的。
john
2008-12-19
打赏
举报
回复
有一中观点说:字节保存顺序也会不同 。 不能确定这个说法是正确的。
john
2008-12-19
打赏
举报
回复
因为用了浮点和双精度类型。怀疑在这方面有所不同。
nullah
2008-12-19
打赏
举报
回复
学习...
MARK
once_and_again
2008-12-19
打赏
举报
回复
顺序点. 副作用.
64位
win
7下pl/sql无法连接oracle解决方法
1、pl/sql无法连接本机的oracle(ORA 12154:TNS:无法解析指定的连接标识符) 解决方法:pl/sql不能安装在Program Files(x86)文件夹下,要安装在Program Files文件夹下 2、pl/sql无法连接远程oracle(ORA-12514: TNS: 监听
程序
当前无法识别连接描述符中请求的服务) 解决方法:①在
linux
下找到oracle目录下的listener.ora,用vi编辑②下面红色为添加部分,其中GLOBAL_DBNAME要与客户机配置的oracle网络名
一致
,SID_NAME要与本地数据库实例名
一致
代码如下:SID_LIST_LISTE
python在
win
和
Linux
中不同,Python子进程logging config在
Win
和
Linux
下
表现
不
一致
的问题
Python父进程通过logging.basicConfig,设定日志文件的路径,子进程再次通过basicConfig设定另一个新的路径。这个操作,在
Win
dows系统和
Linux
下
表现
不
一致
。区别在于,
Win
dows下将打开不同的文件句柄,写入2个不同的文件 。而在
Linux
下,则config看起来无效,子进程和父进程使用
同一个
文件描述符,第二次config无效。(解决的方法文末补充)impor...
C语言嵌入式
linux
编程
C语言到底学到什么程度,才能胜任
Linux
内核、驱动或嵌入式系统的开发?一般来讲,不同的软件开发职位,对C语言的要求是不同的。嵌入式开发,对C语言的要求相比其它职位,相对很高。不仅要求学员掌握C语言的基本语法,还要对 1)计算机基本原理及系统结构、ARM汇编、指令集与微架构 2)
程序
的编译、链接、重定位、安装、加载运行原理 3)C
程序
运行的堆栈管理、内存泄露、栈溢出 4)C标准、C编译器对C标准的扩展、
Linux
内核的C扩展语法 5)指针的深刻掌握、数据存储 6)系统的模块化编程、软件封层、代码复用、框架迭代 7)
Linux
内核的面向对象思想 8)CPU和操作系统入门 有一个更深的理解和掌握。 本套餐课程为一线芯片原厂嵌入式驱动工程师,根据多年学习经历和工作经验,针对嵌入式学员专业背景不同,基础知识理论差异较大,精心打造的一条全新的嵌入式C语言进阶课程路线,无论是嵌入式新学员还是工作1~3年的职场新兵,学完本课程能够帮助您为构建整个嵌入式知识体系框架打下良好的基础,为后续的进阶学习和职场发展提供助力。
Linux
下C语言编程
第1章
Linux
下C语言编程简介 本章将简要介绍一下什么是
Linux
,C语言的特点,
程序
开发的预备知识,
Linux
下C语言开发的环境,
程序
设计的特点和原则以及编码风格等。通过本章的学习,可以对在
Linux
下使用C语言编程有一个基本的了解。 1.1
Linux
简 介
Linux
是能够自由传播并继承了UNIX内核的操作系统,是对UNIX的简化和改进,它既保留了UNIX系统的高安全性,同...
浅谈C语言
程序
在
Linux
下的内存布局
浅谈C语言
程序
在
Linux
下的内存布局 在了解内存布局前,先要了解
程序
的虚拟地址空间以及编译模式。 所谓的虚拟空间,就是
程序
可以使用的虚拟地址的有效范围。虚拟地址和物理地址的映射关系由操作系统决定,相应地,虚拟地址空间的大小也由操作系统决定,但还会受到编译模式的影响。 先了解CPU,然后再了解编译模式。再来看
程序
在内存中的分布。 一、CPU CPU是计算机的核心,决定了计算机的数据...
工具平台和程序库
24,854
社区成员
27,343
社区内容
发帖
与我相关
我的任务
工具平台和程序库
C/C++ 工具平台和程序库
复制链接
扫一扫
分享
社区描述
C/C++ 工具平台和程序库
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章