我有一个像这样描述的功能
int * oddNumbers(l, r, int* result_size){
static int res[r-l];
int index = 0;
while(l < r){
if(l % 2 != 0){
res[index] = l;
index++;
}
l++;
}
result_size = &index;
return res;
}
这是我遇到的一个问题。我不明白的是如何返回一个整数数组。我已经找到了多种方法来做到这一点。声明变量static,并为变量分配内存。
我知道这样做的行业方法是允许调用者为返回值分配内存。但是,遗憾的是我只能访问该程序的那部分功能。
非常感谢任何帮助。
答案 0 :(得分:2)
这个问题通常通过动态内存分配来解决。
在极少数情况下,如果您无法访问malloc
/ free
,则可以使用自己的内存分配器。这是一个&#34;仅限分配&#34;产生指针达到特定预分配限制的示例:
#define MAX_SIZE 65536
int * oddNumbers(int l, int r, int* result_size){
static int raw[MAX_SIZE];
static int* current = raw;
int size = r-l;
// Make sure that allocation size is positive
if (size <= 0) {
return NULL;
}
// Make sure we have enough available memory remaining in raw[]
ptrdiff_t available = &raw[MAX_SIZE] - current;
if (available < size) {
return NULL;
}
// Allocate "size" elements from raw
int *res = current;
current += size;
int index = 0;
while(l < r){
if(l % 2 != 0){
res[index++] = l;
}
l++;
}
return res;
}