我有一个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;
}


您可能希望在初始分配中使用memsetcalloc来确保这些值也是0 BTW。

关于c - 重新分配int数组在内存中的新空间为0,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43098798/

10-12 15:04
查看更多