我完成并通过了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头未使用。