将 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
}
这是执行 realloc
ation 的方法 - 它将其扩展为 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。
我有一个 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
}
这是执行 realloc
ation 的方法 - 它将其扩展为 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。