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


 
Thread Tools Search this Thread
Top Forums Programming *** glibc detected *** : malloc(): memory corruption (fast)
# 1  
Old 04-04-2012
*** 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.

Code:
#include <stdio.h>
#include <string.h>
#include <sqlca.h>
#include <alloca.h>

/* Define constants for VARCHAR lengths. */
#define UNAME_LEN 20
#define PWD_LEN 40

struct rec{
char *ename;
float salary;
float commission;
struct rec *lnk;
};

int main(){

    struct rec *ll;
    ll=NULL;    
    
    dbs(&ll);
    
    display(ll);
    
    return 1;
}


void dbs(struct rec **ll){

    int total_queried = 0;
    struct rec *t,*r,*q;

    EXEC SQL BEGIN DECLARE SECTION;

    struct rec1{
        VARCHAR emp_name[UNAME_LEN];
        float salary;
        float commission;
    };
    struct
    {
        short name_ind;
        short sal_ind;
        short comm_ind;
    } emprec_ind;

    VARCHAR uid[80];
    VARCHAR pwd[20];

    struct rec1 emprec;

    EXEC SQL END DECLARE SECTION;

    strcpy(uid.arr,"hr");
    uid.len =strlen(uid.arr);
    strcpy(pwd.arr,"hr");
    pwd.len = strlen(pwd.arr);
    
    EXEC SQL WHENEVER SQLERROR DO sql_error("ORACLE error--\n");

    EXEC SQL CONNECT :uid IDENTIFIED BY :pwd;

    EXEC SQL DECLARE e_cursor CURSOR FOR SELECT FIRST_NAME,SALARY, COMMISSION_PCT FROM EMPLOYEES;

    EXEC SQL OPEN e_cursor;

    EXEC SQL WHENEVER NOT FOUND DO break;
    printf("\n1");
    while(1)
    {
        EXEC SQL FETCH e_cursor INTO :emprec INDICATOR :emprec_ind;
        emprec.emp_name.arr[emprec.emp_name.len] = '\0';
        total_queried++;        
        printf("\n2");
        if(*ll == NULL)
        {

            t=malloc(sizeof(struct rec));
            printf("\n3");            
            strcpy(t->ename,emprec.emp_name.arr);
            printf("\n 1 ename = %s",t->ename);
            t->salary=emprec.salary;
            t->commission=emprec.commission;
            t->lnk=NULL;
            *ll=t;            
        }
        else{
            printf("\n in else");
            struct rec *q=NULL;    
            q=*ll;
            printf("\n34");            
            while(q->lnk != NULL)
                q=q->lnk;

            r=malloc(sizeof(struct rec));
            
            strcpy(r->ename,emprec.emp_name.arr);
            r->salary=emprec.salary;
            r->commission=emprec.commission;
            r->lnk=NULL;
            q->lnk=r;    
        }
    }
/* Disconnect from ORACLE. */
EXEC SQL COMMIT WORK RELEASE;

}

void display(struct rec *q){
    printf("\n\nEmployee\tSalary\t\tCommission\n");
    printf("--------\t------\t\t----------\n");
    while(q != NULL){

            printf("%-20s\t%8.2f\t\t",q->ename, q->salary);
            printf("%6.2f\n", q->commission);
            q=q->lnk;
    }
}


void sql_error(msg)
char *msg;
{
char err_msg[128];
int buf_len, msg_len;
EXEC SQL WHENEVER SQLERROR CONTINUE;
printf("\n%s\n", msg);
buf_len = sizeof (err_msg);
sqlglm(err_msg, &buf_len, &msg_len);
if (msg_len > buf_len)
msg_len = buf_len;
printf("%.*s\n", msg_len, err_msg);
EXEC SQL ROLLBACK RELEASE;
exit(1);
}

error message :

Code:
1
2
3
 1 ename = Steven
2
 in else
34
2
 in else
34
2
 in else
34
2
 in else
*** glibc detected *** ./ok: malloc(): memory corruption (fast): 0x0000000001176240 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x7a6e6)[0x7f64922246e6]
/lib/x86_64-linux-gnu/libc.so.6(+0x7c91c)[0x7f649222691c]
/lib/x86_64-linux-gnu/libc.so.6(__libc_malloc+0x6d)[0x7f64922283cd]
./ok[0x40108a]
./ok[0x4007f9]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xed)[0x7f64921cb30d]
./ok[0x400839]
======= Memory map: ========
00400000-00402000 r-xp 00000000 07:00 928861                             /home/dell/proc/ok
00601000-00602000 r--p 00001000 07:00 928861                             /home/dell/proc/ok
00602000-00603000 rw-p 00002000 07:00 928861                             /home/dell/proc/ok
0109f000-0118d000 rw-p 00000000 00:00 0                                  [heap]
7f648c000000-7f648c021000 rw-p 00000000 00:00 0 
7f648c021000-7f6490000000 ---p 00000000 00:00 0 
7f64909de000-7f64909f3000 r-xp 00000000 07:00 658486                     /lib/x86_64-linux-gnu/libgcc_s.so.1
7f64909f3000-7f6490bf2000 ---p 00015000 07:00 658486                     /lib/x86_64-linux-gnu/libgcc_s.so.1

the error is thrown from

Code:
else{
            printf("\n in else");
            struct rec *q=NULL;    
            q=*ll;

these lines. please help
# 2  
Old 04-04-2012
The malloc function is declared in stdlib.h so make sure to include it in your source instead of alloca.h
# 3  
Old 04-04-2012
hi Friends,

after changing the these lines, the issue resolved.

/*strcpy(t->ename,emprec.emp_name.arr);*/
t->ename=strdup(emprec.emp_name.arr);

/*strcpy(r->ename,emprec.emp_name.arr);*/
r->ename=strdup(emprec.emp_name.arr);

---------- Post updated at 09:36 PM ---------- Previous update was at 09:35 PM ----------

hi Friends,

after changing the these lines, the issue resolved.

Code:
/*strcpy(t->ename,emprec.emp_name.arr);*/
t->ename=strdup(emprec.emp_name.arr);

/*strcpy(r->ename,emprec.emp_name.arr);*/
r->ename=strdup(emprec.emp_name.arr);

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

glib detected: malloc() memory curruption

I am using libxml2 library for XMl parsing and libxml++ is C++ wrapper over that. So I am using API of libxml++. I am creating my class and composing instance xmlpp::Node *pNode in that. my class also have funciton prepareXPathQuery() which creates query string and have other fucntion... (2 Replies)
Discussion started by: sharadwagh
2 Replies

5. Programming

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

*** glibc detected *** ./a.out: malloc(): memory corruption (fast): Posted A minute ago M trying to make multiway tree and dont know what happend when this part of code get executed: 01void ins(NODE *ptr) 02{ 03 //working 04 if(ptr!=NULL) 05 { 06 SNODE *var=NULL; 07 var=(SNODE... (3 Replies)
Discussion started by: exgenome
3 Replies

6. Programming

./match_pattern.out: malloc(): memory corruption: 0x0000000013a11600 ***

Hi All, I have a simple code which does some computation by matching string patterns. In brief: 1. The code reads .dat and .txt files. 2. .dat files are huge text files and .txt files contain some important words. 3. I am just doing strstr to find the patterns. 4. The function returns the... (3 Replies)
Discussion started by: shoaibjameel123
3 Replies

7. Programming

solved: glibc detection corruption using a fork in popen

Hi, I am having a hell of a time getting this to work. So basically, I have opened a popen to run a program that is going to prompt an action to occur half way through, when it gets to this I need to create a separate process and do some stuff, then return to the original process. This works... (0 Replies)
Discussion started by: imrank27
0 Replies

8. Programming

Why does this occur? *** glibc detected *** malloc(): memory corruption: 0x10013ff8 ***

there seems not to be error in this segment. In some computers, it can work well. But in others, it will give a failure. why it ocurrs and how to deal with it? in a function: if( *ver == NULL ) { *ver = (vertex *) malloc(sizeof(vertex)); //this line ... (17 Replies)
Discussion started by: cdbug
17 Replies

9. Programming

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

I am using a structure defined as follows struct gene_square { double *x; double *y; };I have class, with a member function which is a pointer of this type: gene_square* m_Genes;I am allocating memory in the constructors like this: m_Genes = new gene_square; for (ii=0;... (1 Reply)
Discussion started by: jatoo
1 Replies

10. 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
Login or Register to Ask a Question