执行时定义长度的整数数组
Array of integers with length defined at execution time
我需要在一个函数中分配一个整数数组,然后 return 它。问题是我不知道我需要分配多少内存:它可能是 sizeof(int)*3
因为它可能比我得到的内存更多。
由于分配大块内存可能是多余的或不够用,这不是一个很好的解决方案,我将首次使用 realloc
。
现在我需要像那样循环使用它
for(i = 3; (res[i] = res[i-3] - res[i-2] - res[i-1]) >= 0; i++) {
res = realloc( res, sizeof(long long) * (i+2) );
}
是否允许将地址 return 从 realloc
存储在作为参数给定的同一指针中?
这是创建执行时定义大小数组的好方法吗?
允许将 realloc
返回的地址存储在与参数给定的同一指针中,但这不是一个好方法,因为它会阻止在 realloc
失败时释放分配的内存。
最好先将结果存储到另一个指针中,检查指针是否不是NULL
后,再将其赋值给原始变量NULL
。
for(i = 3; (res[i] = res[i-3] - res[i-2] - res[i-1]) >= 0; i++) {
long long* new_res = realloc( res, sizeof(long long) * (i+2) );
if (new_res == NULL) {
/* handle error (print error message, free res, exit program, etc.) */
} else {
res = new_res;
}
}
我需要在一个函数中分配一个整数数组,然后 return 它。问题是我不知道我需要分配多少内存:它可能是 sizeof(int)*3
因为它可能比我得到的内存更多。
由于分配大块内存可能是多余的或不够用,这不是一个很好的解决方案,我将首次使用 realloc
。
现在我需要像那样循环使用它
for(i = 3; (res[i] = res[i-3] - res[i-2] - res[i-1]) >= 0; i++) {
res = realloc( res, sizeof(long long) * (i+2) );
}
是否允许将地址 return 从 realloc
存储在作为参数给定的同一指针中?
这是创建执行时定义大小数组的好方法吗?
允许将 realloc
返回的地址存储在与参数给定的同一指针中,但这不是一个好方法,因为它会阻止在 realloc
失败时释放分配的内存。
最好先将结果存储到另一个指针中,检查指针是否不是NULL
后,再将其赋值给原始变量NULL
。
for(i = 3; (res[i] = res[i-3] - res[i-2] - res[i-1]) >= 0; i++) {
long long* new_res = realloc( res, sizeof(long long) * (i+2) );
if (new_res == NULL) {
/* handle error (print error message, free res, exit program, etc.) */
} else {
res = new_res;
}
}