C语言 为什么函数返回的数组总是空数组?

juzqafwq  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(137)

一直在做一个leetcode问题,应该很简单,但似乎找不到我的代码中的错误。这个想法是,给定一个整数数组nums和一个目标数,我用两个nums索引填充一个int* 数组,总和是那个目标整数。

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* twoSum(int* nums, int numsSize, int target, int* returnSize) {
    int* arrInd = (int *)malloc(2 * sizeof(int));
    for (int i = 0; i < numsSize; i++) {
        for (int counter = i + 1; counter < numsSize; counter++) {
            if (nums[i] + nums[counter] == target) {
                arrInd[0] = i;
                arrInd[1] = counter;
                return arrInd;
            }
        }
    }
    return NULL;
}

字符串
然而,当运行一个目标为9的测试用例[2,7,11,15]时,正确的返回数组应该是[0,1],但我的代码总是返回[]。请有人解释一下。

hmmo2u0o

hmmo2u0o1#

leetcode测试床几乎肯定会假设你会将返回数组的大小存储在*returnSize中。因为你没有这样做,而且它可能是预先置零的,所以它认为数组是空的,不管你在里面放什么(因为C动态分配的数组没有自己的大小概念,可以用任何公共API查询,你必须传递指向数组的指针和大小)。
只需添加:

*returnSize = 2;

字符串
return arrInd;之前。
另外,为了避免失败时的内存泄漏,在return NULL;之前添加free(arrInd);

相关问题