realloc() fails


 
Thread Tools Search this Thread
Top Forums Programming realloc() fails
# 1  
Old 08-16-2011
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 + user) reaches ~60% (tracked with System Monitor), realloc() fails to allocate additional memory and the program stops.

If the memory used stays below 60%, everything goes just fine.

Again, that 60% is reported by the System Monitor.

I also run Memtest86. It reports no problems with the ram.

Did someone ever experienced something similar? Any hint about where to look at?

Any feedback will be appreciated.
# 2  
Old 08-16-2011
realloc() doesn't check physical memory. What matters is virtual memory availability.
There are several factors that might prevent realloc (or malloc for that matter) to fail including:
  • 32 bit process addressing space
  • Memory overcommitting configuration
  • Area requested larger than free space available (obvious)
  • Memory fragmentation (malloc/realloc must return a contiguous area of virtual memory).
  • Bugs in your program leading to heap corruption
# 3  
Old 08-16-2011
Inside your code are you checking and printing the error returned by realloc when it fails to allocate memory...and can you post that error message here.
# 4  
Old 08-16-2011
How much memory does your system have?
# 5  
Old 08-16-2011
The OP poster already stated 2GB of RAM was installed. Unfortunately, he doesn't tell how much swap is set if any, how memory overcommiting is configured, how large is the segment he tries to reallocate, to what size, and if this is a 32 or 64 bit program.
# 6  
Old 08-16-2011
Thanks everyone. Your responses made me think more.
Code:
void * realloc ( void * ptr, size_t size );


In case that ptr is NULL, the function behaves exactly as malloc, assigning a new block of size bytes and returning a pointer to the beginning of it.
In case that the size is 0, the memory previously allocated in ptr is deallocated as if a call to free was made, and a NULL pointer is returned.

I'm saying it fails because it returns NULL although size is *not* zero.

And, again, it fails when the overall ram usage goes just above 60%.

The C++ program through realloc() is storing a few thousands text files in ram for postprocessing. Being the files size unknown, the ram for each individual file is re-allocated in increments of 500KB.

Although I cannot apriori exclude bugs in the C++ code, it works very well as long as the overall allocated memory stays below 60% of available ram (2GB).

About the system: it is 32b Ubuntu 10.04 on Intel Duo Core. Swap is ~6GB. RAM is 2GB. I'm not familiar with "memory over-committing config"...

I'm digging more into it. If you guys have any hint, I'll be glad to hear.
# 7  
Old 08-16-2011
My best advice would be for you to switch to a 64 bit OS and application. You still don't give a clue about the allocated area sizes but I suspect that your process virtual memory is too fragmented for a contiguous segment large enough to be available.
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() 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

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

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

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

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

8. Programming

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: 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.... (3 Replies)
Discussion started by: Andrewkl
3 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