讨论/技术交流/#☺️小白问题/

这是leetcode简单题:两数之和

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

我的代码一直是执行出错,请大家帮我看一下,请不吝指教☺️

“=================================================================
==29==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x6020000000dc at pc 0x000000401af6 bp 0x7ffe36b63e00 sp 0x7ffe36b63df8
READ of size 4 at 0x6020000000dc thread T0”

这是我的代码:

int* twoSum(int* nums, int numsSize, int target,int* returnSize){
   
    int i,j;
    * returnSize=0;
    int* ret =(int *)malloc(sizeof(int) * 2);
    for(i=0;i<numsSize;i++)
    {
        for(j=0;j<numsSize;j++)
        {
            if(i!=j && nums[i]+nums[j]==target)
                break;
        }
        
        if(i!=j && nums[i]+nums[j]==target)
        break;
    }
    if(i==j  &&  i==numsSize-1)
       {* returnSize=0;
         return NULL;}
        * returnSize=2;
        ret[0]=i;
        ret[1]=j;
        return ret;
}
共 1 个回复
if (i == j && i == numsSize - 1)
{
	*returnSize = 0;
	return NULL;
}

i 和 j 在上面的循环如果没有break,那么最后还会进行i++,所以i == numsSize - 1判断就有问题。
导致最后会返回的索引是numsSize,就越界了。

输入:[2,2,2,2],target = 9