如何使用 malloc() 函数返回数组?

问题描述 投票:0回答:2

我正在尝试解决这个问题:

给定一个整数数组 nums 和一个整数目标,返回两个数字的索引,使它们相加等于目标。

您可以假设每个输入都有一个解决方案,并且 您不能两次使用相同的元素。

您可以按任何顺序返回答案。

Example 1:
 
 Input: nums = [2,7,11,15], target = 9 Output: [0,1] Output: Because
 nums[0] + nums[1] == 9, we return [0, 1].

我的代码是:

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

如您所见,他们在代码开头添加了注释以给出提示,但我不知道应该如何在此处使用 malloc() 函数以及确切的原因。 正如你所看到的,我尝试用 malloc() 函数添加第一行,只是根据我在网上阅读的内容,我认为这会有所帮助,因为我认为它为数组分配了 2 个可用空间,这意味着我将有足够的内存和空间来在其中插入 2 个整数。 但没有成功。

我很高兴听到我应该如何以及出于什么原因在这里使用 malloc 函数, 谢谢。

arrays c loops integer malloc
2个回答
1
投票

不允许在函数体顶部声明与参数同名的局部变量。你应该给另一个名字。

分配大小也是错误的。大小应该是(元素数量)乘以(一个元素的大小)。

最后我猜想返回的数组中有效元素的数量应该写入

returnSize
所指向的内容。

试试这个:

int* twoSum(int* nums, int numsSize, int target, int* returnSize){
    int *returnArray = malloc (2 * sizeof(int));
    for (int i=0; i<numsSize; i++)
    {
        for (int j=0; j< numsSize; j++)
        {
            if (i != j)
            {
               if(nums[i] + nums[j] == target)
               {
                   returnArray[0] = i;
                   returnArray[1] = j;
               }
            }
        }
    }
    *returnSize = 2;
    return returnArray;
}

0
投票

使用 malloc、calloc 或 realloc 函数动态分配数组,数组的大小不存储在内存中的任何位置。因此,没有直接的方法可以找到动态分配数组的大小。要管理动态分配数组的大小,我们必须单独跟踪大小。

© www.soinside.com 2019 - 2024. All rights reserved.