C中的两个和:测试时出现分段故障



我完成并通过了leetcode Two sum问题,但不知怎的,当我试图自己编写测试时,我一直遇到分段错误。下面是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

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

return returnValues;
}
int main(){
int nums[] = {0,1,2,3,4,5};
int size = 6;
int* resultSize;
printf("First index:%d  n", (twoSum(nums, size, 9, resultSize))[0]);
printf("Second index:%d  n", (twoSum(nums, size, 9, resultSize))[1]);
return 0;
}

我试图在twoSum函数中删除变量*returnSize并解决了这个问题。但由于原来的问题需要这个*returnSize变量,我不知道如何在twoSum返回数组中拔出项目而不遇到分割错误,同时仍然使用*returnSize。

任何帮助都是感激的!

*returnSize = 2;试图将值2写入未初始化(即包含不确定值)的指针(即内存地址),从而导致段故障。相反,将resultSize声明为常规的int(为其保留内存),然后将指向该int指针传递给函数:

int resultSize;
printf("First index:%d  n", (twoSum(nums, size, 9, &resultSize))[0]);
printf("Second index:%d  n", (twoSum(nums, size, 9, &resultSize))[1]);

您可能还想将twoSum返回的指针存储在main函数中,以便在打印结果后释放它。

旁注:math头未使用。

相关内容

  • 没有找到相关文章

最新更新