我有一个int数组,当它看到一个比它已经拥有的int值更高的int值时,需要增大它,有没有办法调用realloc()并设置正在创建的内存中的所有新空间?还是我需要遍历内存中的所有新空间并将它们一一设置为0?为了清晰起见,下面的代码。
int main(){
int i;
int currentSize = 10;
int *checkList = malloc(sizeof(int) * currentSize);
while((i = readInt(fp))){
if(i > currentSize){
currentSize = i + 1;
checklist = realloc(checkList, sizeof(int) * (i + 1));
//Need to loop through checklist and declare empty mem to 0?
}
if(!checkList[i]) checkList[i]++;
}
//should have an array where seen values index in checklist == 1
}
最佳答案
这是您执行realloc
的方法-将其扩展为newSize
,然后使用memset
将新元素设置为0。
if(i >= currentSize) {
int newSize = i + 1;
checkList = realloc(checkList, sizeof(int) * newSize);
memset(checkList+currentSize,0,sizeof(int) * (newSize - currentSize));
currentSize = newSize;
}
您可能希望在初始分配中使用
memset
或calloc
来确保这些值也是0 BTW。关于c - 重新分配int数组在内存中的新空间为0,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43098798/