C语言 第10行:第31项:运行时错误:存储到地址0x7fff6774f4f4,该地址空间不足,无法容纳“int”类型对象

6l7fqoea  于 2023-03-12  发布在  其他
关注(0)|答案(2)|浏览(81)

我得到这个运行时错误,我不知道代码出了什么问题。“第10行:第31章:运行时错误:存储到地址0x7fff6774f4f4,没有足够空间容纳“int”类型对象

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

vi4fp9gy1#

我假设这是leetcode中的Twosum问题,如果是,那么第四个参数*returnSize不是一个数组,而是一个指向一个整数的指针,这个整数是你应该返回的数组的大小,下面是经过修改的代码。

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

bxgwgixi2#

由于returnSize不是数组,而是一个指向整数的指针,该指针指示在返回的数组中将返回多少个数字。因此,代码语句“returnSize[1] = j;因此,在我看来,“存储到地址0x 7 fff 6774 f4 f4,但空间不足,无法容纳类型为”int“的对象”只是“超出界限”的委婉说法,这意味着您不应该访问所指区域后面的内存空间。

相关问题