将 int 数组在内存中的新空间重新分配为 0

Realloc int array's new spaces in memory to 0

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

您可以使用 memset 将特定内存范围内的所有值设置为预期值,而不是循环。

您可以像下面这样修改代码以使用 memset

int main(){
    int i;
    int currentSize = 10;
    int *checkList = malloc(sizeof(int) * currentSize);
    while((i = readInt(fp))){
        if(i >= currentSize){
             checklist = realloc(checkList, sizeof(int) * (i + 1));
             //Need to loop through checklist and declare empty mem to 0?
             memset(checklist+currentSize, 0, (sizeof(int) * ((i+1) - currentSize)));
             currentSize = i + 1;
        } 
        if(!checkList[i]) checkList[i]++;
    }

    //should have an array where seen values index in checklist == 1
}

这是执行 reallocation 的方法 - 它将其扩展为 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。