Variables suddenly disappering (C programming)

AI Thread Summary
The discussion centers on a coding issue involving 3D dynamic arrays that are losing values, leading to segmentation faults during execution. The user describes a sequence of operations where values in the array appear to disappear after certain function calls, despite no direct modification to the array being evident in the code. Initial assumptions about memory insufficiency are dismissed as the program uses minimal memory. After debugging with gdb, the user discovers that the problem stems from an error in memory allocation, which was confirmed by a suggestion from another participant. The conversation highlights the importance of correct memory management and the potential pitfalls of using undeclared variables in C programming.
andresordonez
Messages
65
Reaction score
0
Hi, I have an array that is partially disappearing from one line of code to the next and I don't have idea what could be causing this. The pseudocode of the relevant chunk of code goes like this:

...
declare some 3d-dynamic arrays
allocate memory for the arrays
assign values to the elements in the arrays
do something unrelated to the variables in the arrays
do something related to the variables in the arrays
...

when I run the code I get a segmentation fault, when I checked with gdb what was causing this segmentation fault I realized that some elements in one of the arrays were lost, i.e. when printing the value of the variable in gdb the output was "Cannot acces memory at address 0xa3a5b30acffdce5a".

Then I looked more carefully for the problem and I found this:

*****************************************************************************
(gdb) n
260 generate_powers_b_c(powers_b_c, powers_b_c_perm, alpha, alpha, p.lambdaD, edim, edim);
(gdb) n
261 generate_powers_a_b_lambda(powers_a_b_lambda, alpha, alpha, p.lambdaD, edim, edim);
(gdb) p powers_b_c[1][2][2]
$31 = 10509.453369140625
(gdb) n
262 generate_powers_a_c_lambda(powers_a_c_lambda, powers_a_c_lambda_perm, alpha, alpha, p.lambdaD, edim, edim);
(gdb) p powers_b_c[1][2][2]
$32 = 10509.453369140625
(gdb) n
263 generate_powers_b_c_lambda(powers_b_c_lambda, powers_b_c_lambda_perm, alpha, alpha, p.lambdaD, edim, edim);
(gdb) p powers_b_c[1][2][2]
$33 = 10509.453369140625
(gdb) n
267 for( bra = 0; bra < dim; bra++){
(gdb) p powers_b_c[1][2][2]
Cannot access memory at address 0xa3a5b30acffdce5a
*****************************************************************************

where:

powers_b_c, powers_b_c_perm, powers_a_b_lambda, powers_a_c_lambda, powers_a_c_lambda_perm, powers_b_c_lambda, powers_b_c_lambda_perm

are 3-dimensional dynamic arrays.

As can be seen, the value of powers_b_c[1][2][2] is lost as soon as line 263 is executed. It can also be seen that there's no apparent way in which powers_b_c is modified in line 263. The same happens with several elements of all the arrays, there are some elements that don't disappear but instead change their values.

At first I thought it could be due to insufficient memory in my laptop but according to "top" at this stage the program has used less than 0.8% of the total memory.

I don't have a clue about what could be causing this.

If anyone wants further information about the problem or if I was unclear please let me know.

Thanks in advance.
 
Technology news on Phys.org
You seem to have a similar problem with this. Although I can't say for sure without the code.
 
Thanks for the immediate reply!

It sure looks like my problem. I just finished checking that I have all the declarations and function prototypes right. :(

By the way, can you use an undeclared variable in C?!
 
Aha! I found it, there was an error in the memory allocation. Thanks Grieverheart! you pointed me in the right direction.
 
Thread 'Is this public key encryption?'
I've tried to intuit public key encryption but never quite managed. But this seems to wrap it up in a bow. This seems to be a very elegant way of transmitting a message publicly that only the sender and receiver can decipher. Is this how PKE works? No, it cant be. In the above case, the requester knows the target's "secret" key - because they have his ID, and therefore knows his birthdate.
Thread 'Project Documentation'
Trying to package up a small bank account manager project that I have been tempering on for a while. One that is certainly worth something to me. Although I have created methods to whip up quick documents with all fields and properties. I would like something better to reference in order to express the mechanical functions. It is unclear to me about any standardized format for code documentation that exists. I have tried object orientated diagrams with shapes to try and express the...
Back
Top