c-有符号整数溢出



下面在源代码中(我已经在代码中评论了错误(,我得到了

第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);

最新更新