Sponsored Content
Top Forums Programming *** glibc detected *** double free or corruption: 0x40236ff4 *** Post 302256865 by nuri_alço on Monday 10th of November 2008 06:36:38 PM
Old 11-10-2008
*** glibc detected *** ./adim2: double free or corruption (top): 0x08702008 ***

Hi Everybody;
I am struggling for a problem in my code.I couldn't understand the source of the problem.Could you please help me?

Code:
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <string.h>

int main (void) {
    
    DIR *dp;
       struct dirent *ep;
    char path[35] = "../";
    char tempPath[35] = "../";

    struct stat buf;
    int result;
    mode_t tempModeOfFile;

    dp = opendir (path);
    
    if (dp != NULL) {
        
    
        while ( ep = readdir (dp) ){

            printf("%s ",ep->d_name);
            
            printf("%d -- %d\t",result,buf.st_size);

            strncat(tempPath,ep->d_name,strlen(ep->d_name) );

            printf("Step2:tempPath:  <<%s>> \n",tempPath);    //## geçici satır

            if( lstat(tempPath,&buf) == -1){
                //EX 3
                printf("lstat error has occured.Program will terminated.");    
                return -8;
            }

            tempModeOfFile = buf.st_mode;

            
            strcpy( tempPath,path);            
        

        }
        
        (void) closedir (dp);
    }else
        perror ("Couldn't open the directory");
     
    
    result = closedir(dp);
    
    printf("\n closing directory: %d",result);
    

    return 0;
    
}

In working directory, there are 20 files.This code reads these 20 files successfully, but after 20th file, it can not exit from the "while" loop, instead, gives error below :

*** glibc detected *** ./adim2: double free or corruption (top): 0x08702008 ***
======= Backtrace: =========
/lib/libc.so.6[0x73eb16]
/lib/libc.so.6(cfree+0x90)[0x742070]
/lib/libc.so.6(closedir+0x28)[0x7626b8]
./adim2[0x8048717]
/lib/libc.so.6(__libc_start_main+0xdc)[0x6ebdec]
./adim2[0x8048461]
======= Memory map: ========
006b8000-006d2000 r-xp 00000000 fd:00 3735555 /lib/ld-2.5.so
006d2000-006d3000 r-xp 00019000 fd:00 3735555 /lib/ld-2.5.so
006d3000-006d4000 rwxp 0001a000 fd:00 3735555 /lib/ld-2.5.so
006d6000-00813000 r-xp 00000000 fd:00 3735584 /lib/libc-2.5.so
00813000-00815000 r-xp 0013c000 fd:00 3735584 /lib/libc-2.5.so
00815000-00816000 rwxp 0013e000 fd:00 3735584 /lib/libc-2.5.so
00816000-00819000 rwxp 00816000 00:00 0
00919000-00924000 r-xp 00000000 fd:00 3735637 /lib/libgcc_s-4.1.2-20080102.so.1
00924000-00925000 rwxp 0000a000 fd:00 3735637 /lib/libgcc_s-4.1.2-20080102.so.1
00e28000-00e29000 r-xp 00e28000 00:00 0 [vdso]
08048000-08049000 r-xp 00000000 00:16 2817420 /home/ogr/b20521751/3_odev/directory_traversal/adim2
08049000-0804a000 rw-p 00000000 00:16 2817420 /home/ogr/b20521751/3_odev/directory_traversal/adim2
08702000-08723000 rw-p 08702000 00:00 0
b7e00000-b7e21000 rw-p b7e00000 00:00 0
b7e21000-b7f00000 ---p b7e21000 00:00 0
b7f41000-b7f43000 rw-p b7f41000 00:00 0
b7f48000-b7f49000 rw-p b7f48000 00:00 0
bfbf1000-bfc07000 rw-p bfbf1000 00:00 0 [stack]
Aborted
 

10 More Discussions You Might Find Interesting

1. 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

2. 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

3. 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

4. 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

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

*** 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

7. Programming

FORTRAN: double free or corruption

Hello. I'm looking for a quite "interesting" bug I'm using fortran 90, compiler gfortran and the main idea is for every time step I build a bin structure for search contact between particles, for this at the begining TYPE :: circle_index INTEGER(kind = 4) :: ind_p TYPE(circle_index),... (1 Reply)
Discussion started by: Marce
1 Replies

8. 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

9. 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

10. 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
DIRECTORY(3)						   BSD Library Functions Manual 					      DIRECTORY(3)

NAME
closedir, dirfd, opendir, readdir, readdir_r, rewinddir, seekdir, telldir -- directory operations LIBRARY
Standard C Library (libc, -lc) SYNOPSIS
#include <dirent.h> int closedir(DIR *dirp); int dirfd(DIR *dirp); DIR * opendir(const char *dirname); struct dirent * readdir(DIR *dirp); int readdir_r(DIR *restrict dirp, struct dirent *restrict entry, struct dirent **restrict result); void rewinddir(DIR *dirp); void seekdir(DIR *dirp, long loc); long telldir(DIR *dirp); DESCRIPTION
The opendir() function opens the directory named by dirname, associates a directory stream with it, and returns a pointer to be used to iden- tify the directory stream in subsequent operations. In the event of an error, NULL is returned and errno will be set to reflect if dirname cannot be accessed or if it cannot malloc(3) enough memory to hold the whole thing. The readdir() function returns a pointer to the next directory entry. It returns NULL upon reaching the end of the directory or on error. In the event of an error, errno will be set to any of the values documented for the getdirentries(2) system call. The readdir_r() function provides the same functionality as readdir(), but the caller must provide a directory entry buffer to store the results in. If the read succeeds, result is pointed at the entry; upon reaching the end of the directory, result is set to NULL. The readdir_r() function returns 0 on success or an error number to indicate failure. The telldir() function returns the current location associated with the named directory stream. Values returned by telldir() are good only for the lifetime of the DIR pointer (e.g., dirp) from which they are derived. If the directory is closed and then reopened, prior values returned by telldir() will no longer be valid. The seekdir() function sets the position of the next readdir() operation on the directory stream. The new position reverts to the one asso- ciated with the directory stream when the telldir() operation was performed. The rewinddir() function resets the position of the named directory stream to the beginning of the directory. The closedir() function closes the named directory stream and frees the structure associated with the dirp pointer, returning 0 on success. On failure, -1 is returned and the global variable errno is set to indicate the error. The dirfd() function returns the integer file descriptor associated with the named directory stream on success, see open(2). On failure, -1 is returned and the global variable errno is set to indicate the error. Sample code which searches a directory for entry ``name'' is: dirp = opendir("."); if (dirp == NULL) return (ERROR); len = strlen(name); while ((dp = readdir(dirp)) != NULL) { if (dp->d_namlen == len && strcmp(dp->d_name, name) == 0) { (void)closedir(dirp); return (FOUND); } } (void)closedir(dirp); return (NOT_FOUND); LEGACY SYNOPSIS
#include <sys/types.h> #include <dirent.h> <sys/types.h> is necessary for these functions. SEE ALSO
close(2), lseek(2), open(2), read(2), compat(5), dir(5) HISTORY
The closedir(), dirfd(), opendir(), readdir(), rewinddir(), seekdir(), and telldir() functions appeared in 4.2BSD. BSD
June 4, 1993 BSD
All times are GMT -4. The time now is 03:29 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy