这是什么高级用法?realloc改变固定数组大小?
我摘了程序中有关的两处显示在同一幅图片中,主要看我用黄色画出来的内容,其余无关代码不用看。
奇怪的地方是程序定义的结构FILELIST中有一个长度为1的数组,之后用realloc重新分配后竟然能够访问1之后的索引。能解释下吗?
回答:
pList->info[n]是对info[1]数组的越界访问,毕竟数组只有一个长度大小。但这里的访问不会出现问题,因为动态内存分配保证了这样的安全性
回答:
逻辑上没问题,realloc可以对给定的指针所指的空间进行扩大或者缩小,无论是扩张或是缩小,原有内存的中内容将保持不变。
对于缩小,则被缩小的那一部分的内容会丢失。
对于放大,之前的内容不会受到影响。
所以这里就是找到下一个文件,就把pList的指向的内存扩一下,原先的内容还是保留。
不太确定这段程序的目的,作为Demo怎么写都可以啦,毕竟只是演示一下。
但是必须强调一下,在实际使用中这么写显得有点奇特。
作为一个c/c++程序员,应该谨记内存分配是昂贵的这条原则。
回答:
这其实算一种满 常规的做法, 至少我见过一些.
FILELIST是一个变长数组. iNum记录数组长度, FILELIST->info为FILEINFO数组开始地址.
一次分配 sizeof(FILELIST) + N * sizeof(FILEINFO) 长度的内存给 一个FILELIST指针pList.
则当前数组长度为, er, N+1. pList->info[n] 指向第n+1 FILEINFO元素.
以上是 这是什么高级用法?realloc改变固定数组大小? 的全部内容, 来源链接: utcz.com/p/195823.html