问题记录1

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

问题原因:

这个函数的问题在于它返回了一个指向局部变量的指针。在函数结束时,局部变量numlist的内存空间将被释放,因此返回的指针将指向无效的内存位置。这可能会导致未定义的行为或程序崩溃。

要解决这个问题,可以使用动态分配内存来创建一个新的数组,或者将数组作为参数传递给函数并在函数内部修改它。

解决方式

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

你可能感兴趣的:(算法,数据结构,c语言)