+ 3
Empty Array and Their Values
In this program, I created an empty array, when I print their values, I don't get nil/null. https://code.sololearn.com/cq5pWMHE636d/?ref=app
16 Réponses
+ 7
lol seems that you have a little trouble..
when iterating the last cycle
sum[4] = arr1[4] + arr2[4]
well arr1 is composed by 4 elements so arr1[4] is out of the array => undefined behaviour!
you can literally crash whit such a code!
One solution to avoid this kind of undefined behaviors is use sizeof(array )/sizeof (type) to get array bounds.
plus arrays should be initialized /worked/iterated etc etc in a symmetric way..
there should be always te same form..
for example..
int elementsNo=10;
arr1[elementsNo]; //declaration
arr2[elementsNo];
for(int i =0; i <elementsNo ; ++I){
arr1[i]=0; // initialize
arr2[I]=0;
}
or instead arr1[]={1,2,3,4.....but dangerous.. you can accidentally miss a number => array size is not as expected => undefined behaviour
is all up to you.. c++ gives you freedom flexibility but responsibility!
+ 7
yes! this is the problem!
often compilers doesn't give you any error especially in case of undefined behaviors.
Those are the bugs most hard to track down.
Don't worry and keep on doing your experiments,
arrays.. pointers.. is very important that you do these tests, you will get a robust understanding.
after you will learn styles , conventions and a coding methodology to avoid these troubles.
Like the little advices I gave you.
But for now these experiments gives you a great experience!
+ 5
It's garbage, not a random number.
You printed what some other process left on the address your array is now.
+ 3
Your new program acts like address of arr_one[4] is pointing to i, since i was 4 during the addition and is 5 after the loop ends.
+ 2
No, but the array is at an address and reads the values out of it. If there is no value assigned it just prints what's in there, since it doesn't get overwritten automatically.
BTW: static variables get overwritten with 0 when creating them, so static int x = 0 would be redundant (but you should still do it for readability ^^)
+ 2
Nope. The value that's written at the position your array is. And because you didn't tell the compiler what values these are it just takes the values that some other process left there. Computers are dumb. The just do what they are told to do.
+ 2
I'll try in Codeblocks
+ 2
Just to check whether arr_one[4] really pointed to i, I added the following line :
cout<<&i<<" "<<&arr_one[4]<<endl;
But now, the addresses became different, and the value of arr_one[4] became a random garbage value, and it retained its value (no more increment).
But commenting out the line above made arr_one[4] a 5 again in the end. Why?
+ 2
Pointers are assigned random addresses of memory when declared. That's why many/most of the time they should be initialized. Whatever so happens to be in the memory address it points to will be displayed if not initialized. e.g. assigned value 0,1, or null.
You declared an array with certain size then looped through the memory locations they POINT to and displayed what's there. Remember, arrays are actually pointers.
+ 2
@AZTECCO
C++ doesn't give error. and it prints the result with no elements defined in array position. so I posted the question. I still need to learn more and more...
+ 2
these are garbage values
that are already in a new made array
do when u give the value of elements
like A[1]=1; then
u are just replacing the garbage values
+ 1
So Alex what is printed is the address of the elements.
+ 1
Ye, So I created another program (with problems)
@Alex, @Jayden
Take a look
https://code.sololearn.com/csd1nzIK93o7/?ref=app
+ 1
@Mr. Potter
I tried printing inside the loop and arr_one[i] gave me the values : 1,2,3,4,4. Maybe its a bug here, so Ill try it on CppDroid. Edit : Same output in CppDroid. Its not a bug, atleast.
+ 1
I just moved the arr_two to the heap and then, I get a garbage value. But that value remains the same, inside and outside the loop.
Thus, I think arr_one overlapped on arr_two. But I still can't guess why I got different values inside and outside the loop.
+ 1
Thank you swim for rexterster.com