【发布时间】:2021-10-17 07:24:29
【问题描述】:
我完成并通过了 leetcode 两个和的问题,但不知何故,当我尝试自己编写测试时,我一直遇到分段错误。这是我的代码:
#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 变量,我不知道如何在仍然使用 *returnSize 的同时提取 twoSum 返回数组中的项目而不会遇到分段错误。
感谢任何帮助!
【问题讨论】:
-
变量
resultSize是一个指针,但是它指向哪里?定义为非指针变量,使用指针操作符&来传递一个指向它的指针。或者甚至需要它,因为返回的大小将总是等于2? -
另一方面,您的程序中存在内存泄漏。
-
Resultsize 是一个指针,但您没有分配内存来使用它。就像您对返回值所做的那样。但我不明白你为什么在那里使用指针。
标签: c segmentation-fault