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.
 
Dear Peeps I have posted a few questions about programing on this sectio of the PF forum. I want to ask you veterans how you folks learn program in assembly and about computer architecture for the x86 family. In addition to finish learning C, I am also reading the book From bits to Gates to C and Beyond. In the book, it uses the mini LC3 assembly language. I also have books on assembly programming and computer architecture. The few famous ones i have are Computer Organization and...
I have a quick questions. I am going through a book on C programming on my own. Afterwards, I plan to go through something call data structures and algorithms on my own also in C. I also need to learn C++, Matlab and for personal interest Haskell. For the two topic of data structures and algorithms, I understand there are standard ones across all programming languages. After learning it through C, what would be the biggest issue when trying to implement the same data...
Back
Top