发布网友 发布时间:2024-09-27 16:24
共5个回答
热心网友 时间:2024-10-07 13:24
你定义的是指针,而不是数组,虽然指针和数组在用起来看似一样,其实差别很大。数组的变量存储空间在定义时是分配的,指针是一直往后读写,只要后面让读写,就会读下去。这样理解,超出部分也一定占了存储空间,这个存储空间可能是没有使用的,也可能是使用过的,如果里面的数据正被调用,那就会异常。另外,当你再次扩大数组范围时,也可能会产生异常。热心网友 时间:2024-10-07 13:24
malloc每次在分配的时候,分配的空间比实际要求的多些,它分配内存时会保留一定的空间用来记录分配情况,多次分配会导致空间的浪费。所以你超出了申请的内存空间没出现异常是正常的。但是最好还是不要越界,以免破坏它的数据结构!!热心网友 时间:2024-10-07 13:17
内存操作产生异常基本都是由于读写了非法内存,由于你在malloc一段内存时,后续内存并未被使用只是一堆的乱码,当然是可写的,你调用的printf("%s size:%zu \n", str1, strlen(str1));打印的结果是不定的,要看程序当前堆内存情况而定,直到遇到字符串结束符为止热心网友 时间:2024-10-07 13:18
在内存空间,你申请的空间是10,如果你输入的数大于这个值,那么你大于以后的那些值就丢失 了 ,就像电梯一样超载了 超载的那些人是无法进入电梯的, 到最后上楼的只有空间的那些字符数。热心网友 时间:2024-10-07 13:17
scanf读取的字符先存到缓存区的,再从缓存区读取10个存到str1指向的空间,所以打印正常的。