what will be behavior of following code snippet? [duplicate] - c++

This question already has answers here:
float to int unexpected behaviour
(6 answers)
Closed 6 years ago.
What will be the behavior and output of the following code if i accidentally code so in C/C++,
float a = 12.5;
printf("%d\n", a);
printf("%d\n", *(int *)&a);

Rubish and more rubish.
You would get something meaningful if you did the following though
printf("%d\n", (int)a);

its undefined, because ANSI defines not a relation between sizeof(int) and sizeof(float).

Related

C++ weird array behaviour [duplicate]

This question already has answers here:
How dangerous is it to access an array out of bounds?
(12 answers)
indexing past the end of C arrays [duplicate]
(2 answers)
Why doesn't my program crash when I write past the end of an array?
(9 answers)
Array overflow (why does this work?) [duplicate]
(5 answers)
The effects of writing past the end of an array [duplicate]
(5 answers)
Closed 2 years ago.
I was debugging my code for key index counting and found this problem.
I do not understand what is happening here. I've looked at the code for too long to see if I am missing something very obvious, but it does not seem like it.
int main()
{
const int r=7,len=10;
int arr[10]={1,4,6,2,0,4,3,6,5,2};
int count[r+1]={0};
for(int i=0;i<len;i++)
{
count[arr[i]+1]++;
}
cout<<arr[0]<<" ";
for(int i=0;i<r+1;i++)
{
count[i+1]+=count[i];
}
cout<<arr[0]<<" ";
return 0;
}
This is the kind of a mock up code which generates the same bug.
Output:-
1 11
I am not changing value of arr anywhere in my program and still it shows 11 instead of 1 in the output.
if I comment out count[arr[i]+1]++; or count[i+1]+=count[i]; or both it gives the correct output.
1 1
What is happening please explain. (comment if I am doing something silly).
Edit: This is only happening with arr[0].
Compiling it with g++ -Wall -Wextra you get this warning:
rando_so.cpp: In function 'int main()':
rando_so.cpp:15:19: warning: iteration 7 invokes undefined behavior [-Waggressive-loop-optimizations]
count[i+1]+=count[i];
~~~~~~~~~~^~~~~~~~~~
rando_so.cpp:13:18: note: within this loop
for(int i=0;i<r+1;i++)
This hints you to look a bit closer at that second loop. Your variable i goes up to the highest possible index of count - and then you add 1. That is undefined behaviour. In your case, it is likely that you happen to be writing into the first element of arr now, because of how it's laid out on the stack. But as far as I know, anything could happen as a result of this.

Can anyone explain this code behaviour in c++? [duplicate]

This question already has answers here:
Is subtracting larger unsigned value from smaller in C++ undefined behaviour?
(2 answers)
Is unsigned integer subtraction defined behavior?
(6 answers)
Closed 3 years ago.
vector<int> a(10);
vector<int> b(20);
if ((a.size() - b.size()) > 1) {
cout << "yes";
}
Can anyone explain why this code prints "yes". If I try storing a.size() - b.size() in an int variable, it is working as expected.

Post Increment in C++ [duplicate]

This question already has answers here:
Undefined behavior and sequence points
(5 answers)
Closed 7 years ago.
I know the concept of post increment but how does it apply to the follow? The output of t is 10. How to explain the undefined behavior?
int a = 2;
int b = 3;
int t;
t = a++ * (a+b);
That is undefined behavior you have there.

How does C++ process this [duplicate]

This question already has answers here:
Undefined behavior and sequence points
(5 answers)
Closed 7 years ago.
I have here an equation i can't understand how c++ process this. Can someone explain this operation?
code:
#include <stdio.h>
main(){
int a[10] = {0,1,2,3,4,5,6,7,8,9};
int i = 0;
int num = a[i+++a[++i]]+a[++i+i++];
printf("\nnum1: %d i: %d,num,i);
}
why is the answer num = 9 while index i is just equal to 4;
Using ++ twice in the same expression on the same variable is explicitly undefined by all versions of both the C and C++ standards, and so i does not necessarily equal 4. It could be anything at the whim of the compiler writer.
Never do this. Never use ++ and -- twice in the same expression. There is no way to make any statement about what the resultant value will be, and no experience with what it does with one compiler will mean anything with respect to what another compiler does.

Why does this program output 4, instead of 3? [duplicate]

This question already has answers here:
Why are these constructs using pre and post-increment undefined behavior?
(14 answers)
Output of multiple post and pre increments in one statement [duplicate]
(1 answer)
Closed 8 years ago.
int main()
{
int var = 1;
var += ++var;
cout<<var;
return 0;
}
In Java this will output 3, as expected, but in C++ (above) it outputs 4. Why?
Because this is undefined behaviour. You're modifying and accessing the same variable without an intervening sequence point, so the outcome is really up to the compiler. If you compile this with clang, you'll see:
unsequenced modification and access to 'var'
I actually get 4 as the answer, but it could equally be 3, 7, 123125123 or "Lobster".