首先我们看看以下代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define SIZE 0x40000 /*十六进制的表示方法,等于十进制262 144,你们要习惯用十六进制,因为两个十六进制刚好是一个字节*/
int main()
{
FILE *fp=NULL;
char *h=NULL;
(h=(char*)malloc(SIZE))?puts("OK"):puts("Error");
memset(h,0,SIZE);
puts(h);
(fp=fopen("vhd","w"))?puts("OK"):puts("Error");;
fwrite(h,SIZE,1,fp)?puts("OK"):puts("Error");
fclose(fp);
free(h);
return 0;
}
就是以上代码,你们使用VC和turbo C 分别编译,看生成文件的大小是否相同。
如果你的turb C不是修改过的,turboC生成的文件是“0”字节
而VC生成的文件是262144字节。
问题出在哪里呢?就是VC和turbo C 的malloc 函数不同。turbo C 中的malloc(int) 函数只能传人2个字节的参数,所以0x40000中的高位0x4因为溢出而没有传入,所以获得“0”字节的文件。这里要注意turbo C中的malloc 函数最大分配0xFFFF就是65535个字节的内存,同理如果各位在以后开发过程中,出现这样的情况,可以验证是否是编译器提供的函数不同所致。VC malloc的情况你们自己动手查查看。
本文探讨了在使用VC和Turbo C编译器时,因malloc函数实现的不同而导致生成文件大小不一致的问题。Turbo C中malloc仅接受2字节参数,导致高位溢出,最终生成0字节文件。
633

被折叠的 条评论
为什么被折叠?



