Pointer to a struct (with pointers) *** glibc detected *** double free


 
Thread Tools Search this Thread
Top Forums Programming Pointer to a struct (with pointers) *** glibc detected *** double free
# 1  
Old 12-01-2008
Pointer to a struct (with pointers) *** glibc detected *** double free

I am using a structure defined as follows

Code:
struct gene_square
{
    double *x;
    double *y;
};

I have class, with a member function which is a pointer of this type:

Code:
gene_square* m_Genes;

I am allocating memory in the constructors like this:

Code:
m_Genes = new gene_square[square_genome_size];
    for (ii=0; ii<square_genome_size; ii++)
    {
        (m_Genes+ii)->x = new double[POINTS];
        (m_Genes+ii)->y = new double[POINTS];
    }

And my destructor does this:

Code:
if(m_Genes != NULL)
    {
        for(ii=0; ii<square_genome_size; ii++)
        {
            if (((m_Genes+ii)->x)!=NULL)
            {
                delete [] (m_Genes+ii)->x;
            }
            if (((m_Genes+ii)->y)!= NULL)
            {    
                delete [] (m_Genes+ii)->y;
            }
        }
        delete [] m_Genes;
    }

But when the destructor is called I am getting a glibc double free error.

Code:
*** glibc detected *** ./Evolution: double free or corruption (fasttop): 0x08055008 ***

And I can't work it out.

Anyone able to help?
# 2  
Old 12-05-2008
I think the code looks okay (but I'm not a C++ expert). It could be that x and y no longer hold the original reference to your allocated arrays. In that case, the pointers might point somewhere they did not originally. Try this: after instantiating the m_Genes object, create a "shallow copy" of it, then before you distruct, compare the shallow copy with the m_Genes copy. If there's a difference in pointer values, that might be your problem.

Another possibility just occurred to me: It could be that you made a shallow copy of m_Genes and deleted the shallow copy as if it were a deep copy. That is, you already freed the pointers in m_Genes->x and ->y.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Homework & Coursework Questions

FORTRAN error *** glibc detected ***

Use and complete the template provided. The entire template must be completed. If you don't, your post may be deleted! 1. The problem statement, all variables and given/known data: I'm doing aproximation of derivative called five-point stencil. For every value of x, in interval , in step... (0 Replies)
Discussion started by: antonija
0 Replies

2. Programming

C++ glibc detected double free or corruption(!prev) using shared library

Currently I test a shared library vendor provided in linux , the following is the simple source : #include <iostream> using namespace std; extern int test1(); extern int test2(); int main() { cout << "hello world" << endl ; return 0 ; cout << "Test 1" << endl; ... (6 Replies)
Discussion started by: barfatchen
6 Replies

3. Programming

*** glibc detected *** ./a.out malloc() memory corruption

I am facing a problem of memory corruption. The loop runs for the first time but does not go through the second time. What could be the problem? for(int z=0;z<2;z++) { fp=fopen("poly.dat","r"); /*do something which reads this file into a 2D array*/ fclose(fp); ... (10 Replies)
Discussion started by: dare
10 Replies

4. Programming

*** glibc detected *** : malloc(): memory corruption (fast)

Hi Friends, while executing the below code, am getting *** glibc detected *** ./ok: malloc(): memory corruption (fast) error, please suggest how to solve this issue. #include <stdio.h> #include <string.h> #include <sqlca.h> #include <alloca.h> /* Define constants for VARCHAR... (2 Replies)
Discussion started by: mpjobsrch
2 Replies

5. Programming

Pointer to pointers

Hi guys, I'm trying to understand pointers in C and made a simple example and I've problems with It. Can someone help? #include <stdio.h> #include <stdlib.h> #include <assert.h> int f1(char **str_); int main(int argc, char **argv) { char *str = NULL; f1(&str); ... (3 Replies)
Discussion started by: pharaoh
3 Replies

6. Programming

Using pointers to struct members as args to functions

In a well-known book on the C language, there is an example of an efficient method for using a struct member as an argument to a function. (I'm a C noob, but I believe the correct terminology might be: use call-by-reference instead of call-by-value.) The function is printf. Anyway, here's a... (5 Replies)
Discussion started by: uiop44
5 Replies

7. Homework & Coursework Questions

Passing pointers to struct

Hi, i'm trying to copy a struct into a binary file using the unix instruction write, so i declare and fill the struct "superbloque" in one function "initSB" and then i pass the pointer to another function called bwrite (for block write) which calls write. The problem is that i call the function... (2 Replies)
Discussion started by: ignatius3
2 Replies

8. Homework & Coursework Questions

C++ struct pointers & functions

Hi All, My latest assignment (practice not coursework!) is to write prototype interactive exam/test console application. I've used structs to store the question information (not sure if this was the best way to do it?) and I have the following code that outputs each question and it's possible... (0 Replies)
Discussion started by: pondlife
0 Replies

9. Programming

*** glibc detected *** double free or corruption: 0x40236ff4 ***

when i try to use the class i wrote, i either get this: *** glibc detected *** double free or corruption: 0x40236ff4 *** and the proccess exits with an error code of 0; or it segfaults. could someone look at my header file (with imp.) to give me some insight as to why its not working? ... (19 Replies)
Discussion started by: norsk hedensk
19 Replies

10. Programming

*** glibc detected *** free(): invalid next size (normal): 0x0000000000503e70 ***

hi, I have made a small C program that make use of malloc and free for processing bitmap images. when i try to run the program, I am getting a error something like *** glibc detected *** free(): invalid next size (normal): 0x0000000000503e70 *** I am not sure of which free() is causing this... (1 Reply)
Discussion started by: vbreddy
1 Replies
Login or Register to Ask a Question