# Check for Integer Overflow

Write a “C” function, int addOvf(int* result, int a, int b) If there is no overflow, the function places the resultant = sum a+b in “result” and returns 0. Otherwise it returns -1. The solution of casting to long and adding to find detecting the overflow is not allowed.

Method 1
There can be overflow only if signs of two numbers are same, and sign of sum is opposite to the signs of numbers.

```1)  Calculate sum
2)  If both numbers are positive and sum is negative then return -1
Else
If both numbers are negative and sum is positive then return -1
Else return 0
```

## C++

 `#include ` `using` `namespace` `std; ` ` `  `/* Takes pointer to result and two numbers as  ` `    ``arguments. If there is no overflow, the function  ` `    ``places the resultant = sum a+b in “result” and  ` `    ``returns 0, otherwise it returns -1 */` `int` `addOvf(``int``* result, ``int` `a, ``int` `b)  ` `{  ` `    ``*result = a + b;  ` `    ``if``(a > 0 && b > 0 && *result < 0)  ` `        ``return` `-1;  ` `    ``if``(a < 0 && b < 0 && *result > 0)  ` `        ``return` `-1;  ` `    ``return` `0;  ` `}  ` ` `  `// Driver code ` `int` `main()  ` `{  ` `    ``int` `*res = ``new` `int``[(``sizeof``(``int``))];  ` `    ``int` `x = 2147483640;  ` `    ``int` `y = 10;  ` ` `  `    ``cout<

## C

 `#include ` `#include ` ` `  `/* Takes pointer to result and two numbers as ` `    ``arguments. If there is no overflow, the function ` `    ``places the resultant = sum a+b in “result” and ` `    ``returns 0, otherwise it returns -1 */` ` ``int` `addOvf(``int``* result, ``int` `a, ``int` `b) ` ` ``{ ` `     ``*result = a + b; ` `     ``if``(a > 0 && b > 0 && *result < 0) ` `         ``return` `-1; ` `     ``if``(a < 0 && b < 0 && *result > 0) ` `         ``return` `-1; ` `     ``return` `0; ` ` ``} ` ` `  ` ``int` `main() ` ` ``{ ` `     ``int` `*res = (``int` `*)``malloc``(``sizeof``(``int``)); ` `     ``int` `x = 2147483640; ` `     ``int` `y = 10; ` ` `  `     ``printf``(``"%d"``, addOvf(res, x, y)); ` ` `  `     ``printf``(``"\n %d"``, *res); ` `     ``getchar``(); ` `     ``return` `0; ` `} `

Output:

```-1
-2147483646
```

Time Complexity: O(1)
Space Complexity: O(1)

Method 2
Thanks to Himanshu Aggarwal for adding this method. This method doesn’t modify *result if there us an overflow.

## C++

 `#include ` `using` `namespace` `std; ` ` `  `int` `addOvf(``int``* result, ``int` `a, ``int` `b)  ` `{  ` `    ``if``( a > INT_MAX - b)  ` `        ``return` `-1;  ` `    ``else` `    ``{  ` `        ``*result = a + b;  ` `        ``return` `0;  ` `    ``}  ` `}  ` ` `  `int` `main()  ` `{  ` `    ``int` `*res = ``new` `int``[(``sizeof``(``int``))];  ` `    ``int` `x = 2147483640;  ` `    ``int` `y = 10;  ` `     `  `    ``cout<

## C

 `#include ` `#include ` `#include ` ` `  `int` `addOvf(``int``* result, ``int` `a, ``int` `b) ` `{ ` `   ``if``( a > INT_MAX - b) ` `     ``return` `-1; ` `   ``else` `   ``{ ` `     ``*result = a + b; ` `      ``return` `0; ` `   ``} ` `} ` ` `  `int` `main() ` `{ ` `  ``int` `*res = (``int` `*)``malloc``(``sizeof``(``int``)); ` `  ``int` `x = 2147483640; ` `  ``int` `y = 10; ` ` `  `  ``printf``(``"%d"``, addOvf(res, x, y)); ` `  ``printf``(``"\n %d"``, *res); ` `  ``getchar``(); ` `  ``return` `0; ` `} `

Output:

```-1
0
```

Time Complexity:
O(1)
Space Complexity: O(1)

Please write comments if you find any bug in above codes/algorithms, or find other ways to solve the same problem

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.

My Personal Notes arrow_drop_up

Improved By : rathbhupendra

Article Tags :
Practice Tags :

6

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.