c - 当返回类型为 int * 时返回 int 数组

标签 c

我有一个这样描述的函数

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;
}

这是我被要求解决的问题。我不明白的是如何返回一个整数数组。我已经查找了多种方法来做到这一点。声明变量静态,并为变量分配内存。

我知道这样做的行业方法是允许调用者为返回值分配内存。但是,不幸的是,我无法访问程序的那一部分,只有这个功能。

如有任何帮助,我们将不胜感激。

最佳答案

这个问题通常通过动态内存分配来解决。

在极少数情况下,当您无法访问 malloc/free 时,您可以滚动自己的内存分配器。这是一个“仅分配”示例,它生成指向特定预分配限制的指针:

#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;
}

关于c - 当返回类型为 int * 时返回 int 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49179002/

相关文章:

c - 如何找出图像中的直线

c - 如何调试由于超出可用动态堆而导致的 Emscripten 段错误

c - 返回 C 中表达式的类型,即它是右值还是左值

被调用对象不是函数或函数指针

使用 strdup 后无法释放内存

c - 在程序运行时读取 fprintf

C将一个char数组拆分成不同的变量

iphone - 是否有一个常量定义长整数或整数的最大值?

c - 如何在c中将一个十六进制字符串与另一个十六进制字符串异或

c++ - 增加 C/C++ 程序使用的(非堆栈)内存