收到一个难以理解的值,并且不清楚它是如何得到它的[关闭]

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

我编写了用于在数组中查找重复项的函数,没有问题地通过了两个测试用例,但在一个测试用例中,我不明白它如何访问数组中的值。 (https://i.stack.imgur.com/ogoQg.png)(https://i.stack.imgur.com/jvVRv.png)(https://i.stack.imgur.com/qvUou.png) 1

int compare(const void * x1, const void * x2){
  return ( *(int*)x1 - *(int*)x2 );
}
int* findDuplicates(int* nums, int numsSize, int* returnSize) {
    int *p = (int*) malloc(numsSize * sizeof(int));
    if(numsSize == 1){
        *returnSize = 0;
        return p;
    }
    qsort(nums, numsSize, sizeof(int), compare);
    int k = 0;
    for(int i = 0; i < numsSize; i++){
        if(i == numsSize - 1){
            break;
        }
        if(nums[i] != nums[i + 1]){
            continue;
        }
        p[k] = nums[i];
        ++k;
        *returnSize +=1;
    }
    return p;
}

我可以通过XOR解决它,但我只是想知道为什么它会获取第二个测试用例中的数据,而且我不明白他是如何获取的。

c algorithm bit-manipulation
1个回答
0
投票

您没有初始化计数器变量。

*returnSize +=1;

如果调用者在调用您之前没有初始化为 0(并且您永远不应该依赖调用者!),您将从不确定的值开始,这会导致未定义的行为。

除此之外,您还应该调整分配的内存大小。您为太多条目分配了内存。 最多可以有

numsSize/2
个重复项。 知道正确的重复次数后,您可以使用
realloc
来缩小数组。

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