下面在源代码中(我已经在代码中评论了错误(,我得到了
第27行:字符33:运行时错误:有符号整数溢出:-1094795586+-1094795556不能在类型"int"中表示
我查阅了不同的文章,比如如何检测有符号整数溢出,但我没有得到要检查的整数
如果working_array[]
的元素的值小于target
整数,则从nums[]
中筛选出这些元素
由于nums[]
的元素与[ 3, 6, 11, 19, 2, ...]
类似,我不担心在最后一个if
语句的SUM期间检查溢出。我错了?
int* twoSum(int* nums, int numsSize, int target, int* returnSize){
int count_elem = 0;
int *working_array = (int*)malloc(numsSize * sizeof(int));
// Going through original array
for(int i=0;i<numsSize;i++){
// If elem nums[i] is less than target, is accepted on a new working array
if(nums[i] < target){
count_elem += 1;
working_array[count_elem] = nums[i];
}
}
working_array = realloc(working_array, count_elem*sizeof(int));
// Creating result array
returnSize = sizeof(int)*2;
int *result_array = (int*)malloc(returnSize);
// Going through working array
for(int i=0;i<count_elem;++i)
for(int j=0;j<count_elem;++j)
// SIGNED INTEGER OVERFLOW IN LINE BELOW
if( (working_array[i]+working_array[j]) == target){
result_array[0] = working_array[i];
result_array[1] = working_array[j];
free(working_array);
return result_array;
}
free(working_array);
return;
}
第页。S: 我知道castmalloc结果是无用的,但这可能是一个小问题。
if(nums[i] < target){
count_elem += 1;
working_array[count_elem] = nums[i];
}
因一个错误而关闭。这将初始化working_array[1]
、working_array[2]
。。。可能高达CCD_ 9,这将是越界的。同时,working_array[0]
从未初始化,并且包含垃圾,这可能是引发溢出的垃圾值。
成功:
if(nums[i] < target){
working_array[count_elem] = nums[i];
count_elem += 1;
}
或者
if(nums[i] < target){
working_array[count_elem++] = nums[i];
}
此外,如上所述,
returnSize = sizeof(int)*2;
int *result_array = (int*)malloc(returnSize);
是错误的,因为CCD_ 11是指针。如果想法是通过引用返回大小,那么您需要
*returnSize = sizeof(int)*2;
int *result_array = (int*)malloc(*returnSize);