help with realloc() on Linux


 
Thread Tools Search this Thread
Top Forums Programming help with realloc() on Linux
# 1  
Old 01-20-2009
help with realloc() on Linux

hi,

I'm using gcc version 3.4.6 on a Red Hat system... (not sure how to determine version of glibc)
when i run the following, i get:

Code:
glibc detected *** realloc(): invalid next size: 0x0804a170

I'm not sure what is wrong. The error happens on the second iteration of
the while loop.

Code:
#include <stdio.h>

main(int argc, char *argv[]) {
    FILE *fp;
    char *contents;    
    char *tmpptr;

    char buf[2];
    int fd;
    int i = 0;
    long lFileLen = 0;

    char fn[25];    
    fn[0] = '\0';
    
    if (argc < 2) {
    	printf("need argument.\n");
    	exit(1);
    }
    sprintf(fn, "/proc/%s/cmdline", argv[1]);
    
    fp = fopen(fn, "rb"); /* Open in BINARY mode */
    if (fp == NULL) {
        perror("could not open cmdine.");
        printf("path=[%s]\n", fn);
        exit(1);
    }

    contents = (char*) calloc(1, sizeof(char)); 
    
    fd = fileno(fp);
    while ((i = read(fd, buf, 1)) > 0) { /* read 1 char at a time */

     /* the contents of /proc/<pid>/cmdine has embedded null chars, so convert to ' ' */
          if (buf[0] == '\0') 
              buf[0] = ' ';

          lFileLen += i;
          tmpptr = (char*) realloc (contents, lFileLen * sizeof(char) + 1);  /* <<<--- what is wrong??? */

          if (tmpptr == NULL) {
             perror("Unable to realloc()");
             free(contents);
             exit(1);
          } else {
             contents = tmpptr;
          }
          strcat(contents, buf);   /* <<<--- this is related to the realloc() error message, but not sure why??? */
printf("###\n");
          
    } /* while ((i = read(fd, buf, 1)) > 0) */
    
   
    fclose(fp);
    
printf("total length: %ld\n", lFileLen);    
printf("content is [%s]\n", contents); 
printf("strlen: %d\n", strlen(contents)); 
    free(contents);
    free(tmpptr);
}


Last edited by Andrewkl; 01-20-2009 at 08:21 PM..
# 2  
Old 01-20-2009
Change the size of block that contents points to...
Code:
contents = (char *)realloc(contents, lFileLen * sizeof(char) + 1);

# 3  
Old 01-20-2009
help with realloc() on Linux

hi,

Not sure what size to give. I increased it:

Code:
tmpptr = (char*) realloc (contents, lFileLen * sizeof(char) + 99);

but the above doesn't help.
the problem seems to be related to the strcat() line:

Code:
strcat(contents, buf);   /* <---- why is this a problem */

if i comment it out the strcat() line, the error doesn't show up, but the "contents" variable has no value.

I'm not sure what I'm missing.
# 4  
Old 01-20-2009
Spot the difference between your command and the one I suggested. Return value of realloc should go to "contents" not "tmpptr" i.e.
Code:
tmpptr = (char *) realloc (contents, lFileLen * sizeof(char) + 1); /* your command */
contents = (char *)realloc(contents, lFileLen * sizeof(char) + 1); /* my suggestion in red */

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Programming

problem with realloc( i think is gcc :/ )

Hi everyone, i made this program. is a simple one for practising malloc, realloc and structs. I have a struct named shop as global variable in which i take the size of the matrix from the keyboard and after i malloc it. I insert the values with the fullarray() and after i print the matrix with... (7 Replies)
Discussion started by: giampoul
7 Replies

2. UNIX for Dummies Questions & Answers

about realloc routing

#include <malloc.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> int* allocat_array(void) { int *array; int tmp; int n_values = 0 ; array = malloc(sizeof(int)); if(array == NULL) return NULL; while(scanf("%d",&tmp) != EOF) { ... (1 Reply)
Discussion started by: vincent__tse
1 Replies

3. Programming

realloc() fails

Not sure in which forum to post this. I'm trying here, in Programming. I'm working on a PC with Intel Duo processor & 2GB of ram. OS is Ubuntu 10.04. I'm having problems with a C++ program that makes extensive use of realloc(). It happens that as soon as the overall memory allocated(OS +... (14 Replies)
Discussion started by: mamboknave
14 Replies

4. Programming

Realloc() question

b = realloc(a, 1000); if realloc succeeds and b!=a (not in-place replacement), does realloc automatically free a or I should free both a and b afterwards? thank you! (5 Replies)
Discussion started by: bashuser2
5 Replies

5. Programming

realloc fails in C : what next ?

Hi all I'm trying to use someone else's software, which has a realloc that fails in it. This is probably due to memory limitations, as it only happens when I use this software on huge datasets. First question : how to diagnose if it's a soft or hard limitation? I mean, if it's due to my... (10 Replies)
Discussion started by: jossojjos
10 Replies

6. Programming

What happens when realloc() fails?

Hi, I am seeing varying results about, when realloc() fails in reallocation. Which one is correct out of the below? a) realloc() maintains the original pointer (i.e) the original pointer is left unaltered/untouched but relloc() returns the NULL value. b) original buffer pointer is lost... (3 Replies)
Discussion started by: royalibrahim
3 Replies

7. Programming

malloc vs realloc

Why when using realloc, john is reversed 3 times but not the other 2 names ? But if I use malloc, then the 3 names are reversed correctly ? (but then there is a memory leak) How can I reverse all 3 names without a memory leak ? char *BUFFER = NULL; char *STRREVERSE(const char *STRING) {... (5 Replies)
Discussion started by: cyler
5 Replies

8. Programming

tolower (static pointer + malloc + realloc)

N00B here. This function would be easier using a char pointer along with free. But I wish to learn how to use char static pointers (they do not require free, right ?). How do I erase the content of a static pointer ? Terminating the string works but the static pointer's content is not being... (4 Replies)
Discussion started by: limmer
4 Replies

9. Programming

Does realloc free fairly?

Hello, my program works properly but valgrind tells me I am not freeing allocated memory. I think the problem is in realloc. I am pretty sure I do something wrong with realloc, because I changed it a bit and valgrind noticed less errors (that the program wasn't working properly with less errors... (3 Replies)
Discussion started by: samciz
3 Replies

10. Programming

Realloc

Can Any body give me a exampla which has the usage of realloc i want a function which uses realloc & increases /decreases the size of a pointer (0 Replies)
Discussion started by: wojtyla
0 Replies
Login or Register to Ask a Question