在debug模式下可以测出由malloc函数分配的内存边界, 一般是连续四个字节的0xFD, 其他的也没有边界.不过堆内存初始化为0xCD, 栈内存初始化为0XCC,也可以看出也可以看出刚分配的内存的界限.
一般读取内存没有问题,但是往常量区 代码段区些数据时,程序就会出错.
void disMem(int offset, int len)
{
int i, n
unsigned char * pl = (unsigned char *)0 + offset
unsigned char * ph = pl + len
n = offset % 16
for(i =0i<ni++) printf(" ")
while(pl <ph)
{
if((long)pl % 16 == 15) printf("%02X ", *pl++)
else printf("%02X\n", *pl++)
}
}
这个可以显示内存offset处长度为len的内存中的数据内容.
你这个涉及到动态分配内存,动态分配内存不是这样用的。你不能录入一个整数,然后char a[n]
char a[6],这样叫静态分配内存,要在一开始就写好需要的内存大小。
首先写给你正确的分配内存处理。其次你问的为什么0是空格或者换行原因是第一个输入长度,输入的格式是6 (空格)或者是6\n(换行) ,scanf("%d",&n)录入了6一个数字。
然后空格或者换行则留到了下一次录入。
所以a[0]是空格或者换行。
代码如下,6超过了范围所以是读不了,或者是乱码。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n
int i,x,y,z
char tem
char* a
printf("请输入将要输入的字符串的长度\n")
scanf("%d",&n)
a= (char*)malloc (n*sizeof(char))
printf("请输入内容")
getchar()
for (y=0y<=ny++)
a[y]=getchar()
printf("%c",a[0])
printf("%c",a[1])
printf("%c6超出范围",a[6])
return 0
}
写代码的时候注意下,比如下面的代码在C++Builder6.0下的输出为32和20:struct {
int i1
char c1
int i2
char c2
int i3
char c3
int i4
char c4
} s1
struct {
char c1
char c2
char c3
char c4
int i1
int i2
int i3
int i4
} s2
ShowMessage(IntToStr(sizeof(s1)))
ShowMessage(IntToStr(sizeof(s2)))