c语言测内存边界

Python030

c语言测内存边界,第1张

在release模式下是测不出内存边界的。但是如果你访问内存超出程序的内存范围,程序出错而退出的

在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)))