C语言指针内存分配问题

来源:百度知道 编辑:UC知道 时间:2024/09/13 01:28:07
请教各位高手一个问题:
char *a;
a=(char *)malloc(100*sizeof(char));
memset(a,0,100);
.
.
.
fread(&a,sizeof(char),100,fp);
小弟设置了一个指向一维数组的指针a;为它分配好内存后,读入一个文件的值,为什么还能访问a[99]之后的很多值?那些之后的值是不是与我读入的文件无关?是否是内存中随机的值?

显然是无关的.

a的有效范围是在0~99,但是C/C++不会做越界检查,所以访问99之后的内存不会报错,可能是某个已经分配给其它变量的内存.当然也可能是还未分配的内存对象,那就是随机的.
但是如果你访问到一块非法的内存地址,那就会报错了.
假设&a[99]的地址为0xff000000,而0xff000004是非法地址的话,那你访问到a[103]是就会出错.

fread(&a,sizeof(char),100,fp);

这句不对。

fread 的第一个参数是文件指针,而不是目标内存

应该写成

fread(fp,sizeof(char),100,a);

目标内存是a,不是&a,a是指向那100个char内存的指针

指针a是char *类型的指针,并不是什么数组。
就算是数组,编译器也不去检查是否越界的,这是c的一个缺陷。

那些之后的值与你读入的文件无关!
是内存中随机的值