以下是我对这三个题目的疑惑,望高手解答。好的追加。
第一题:第三行中的malloc函数是不是这样的,你向它申请若干字节,它给你的是地址?为什么最后会向0地址写入?什么是0地址?
第二题:第三行中a[5]不是已经越界了么,为什么最后还能得到结果?
第三题:使用malloc就可以做出运行时可以随时改变大小的数组(错误)
我的理解是数组一旦定义了,整个大小都不能变,对不对?
malloc在没有足够空间申请的时候会返回NULL,也就是0
因为&是取址运算符,注意,是运算。最后的q-p实际上等于q地址-p地址的偏移量,系统很智能的给出了偏移5个int
realloc才可以在运行时改变空间的大小(数组的大小)
第一个是不是说这个程序一直运行运行,到最后没有空间了,就返回一个0地址?
第二个后面还有一个逗号没看见。。。。勿怪勿怪
希望解答更详细些,谢谢了!
1.当系统再无空间可以分配给程序的时候,malloc会因为申请不到内存而返回NULL值
2.像我说的一样,&是个运算符,用个不太合适的比喻来说就是他会计算出距离a[0]的5个元素的地址,是算出来的,所以并不会读写那个并不属于你的空间,因此不会跳出错误。
而地址相减应该是个很常见的操作了,就不赘述了。
3.malloc只能用于申请内存空间,但该函数无法重新调整空间大小。而realloc才可以调整空间大小。
malloc给你的是地址,0地址就是NULL,while(1)一直执行,直到没有内存可以申请,就返回NULL,此时p的值就为NULL,下面的语句向0地址写入数据,程序就会终止
a[5]没越界...就算越界了,比如a[6],虽然越界了,可不代表它没有值,但他的值是不确定的
对!
第一个明明选B好么........是不是这个程序一直在执行,最后没有空间了就返回0地址?
居然没看到逗号...........我也是够了
⊙﹏⊙b汗。。失误了。。,答案是B。。堆上空间不足,导致分配失败,返回NULL,即0.
malloc返回连续的存储单元的首地址 0地址不可用。
a数组实际元素为 1 2 3 4 5 0 所以a[5]存在 地址差为5。
数组一旦定义了,整个大小都不能变。 但是可以在程序运行时确定数组长度(使用动态联编定义动态数组)