error allocating memory with realloc(). how can i increase max_allowed in the system?

Derek Taylor det135 at
Wed Aug 20 23:34:31 UTC 2008

On Tue, 12 Aug 2008, Jordi Moles Blanco wrote:
>i'm running a FreeBSD 7.0 amd64 machine and struggling with some C code 
>i'm writing.

In addition to the other comments already given, I think that it might
be useful for your learning experience to have some additional comments.

>I've had some trouble with this home-made script as it keeps crashing 
>while launching a "realloc()" call.
>I narrowed down the problem and here i'm sending you a short example of 
>code that crashes:
>#include <stdio.h>
>#include <stdlib.h>
>int main()
>        int midataula;
>        midataula = 3000;
>        char *missatge = (char *)malloc(midataula * sizeof(char));

You should not cast the return value of malloc. [1]

>        missatge[0]='h';
>        missatge[1]='o';
>        missatge[2]='l';
>        missatge[3]='a';

Recall that malloc() makes no promises about the contents of the memory
allocated.  I recommend, in the current style, adding:

>        printf("\n\ntaula1: %s",missatge);
>        int voltes;
>        voltes = 0;

Traditionally in C, all variable declarations appear at the beginning of
the local scope.  Declaring new variables mid-scope is valid in certain
off-shoots of C and may be acceptable in newer dialects/standards of the
language, but the majority of C programmers might make certain
assumptions about your code following older traditions.

This certainly is not too egregious, but while I was here, I thought I'd
mention it. 

>        while(voltes<4)
>        {
>                midataula = midataula+500;
>                realloc(missatge, midataula * sizeof(char));
>                voltes++;
>        }
>        printf("\n\ntaula2: %s",missatge);
>this is a full "working" you can compile on your machine.
>Like this... i get "Segmentation fault (core dumped)"
>but if instead of "while(voltes<4)" i use "while(voltes<3)"
>the script works fine with this output:
>taula1: hola
>taula2: hola
>so... i guess there must be a limit in the system somewhere.
>I've tried to reset all variables that i've seen in the "sysctl -a" list 
>refering to malloc, memory, mem, and so on... but so far i haven't fixed 
>the problem.
>i'm running this script as root and in the /etc/login.conf file there's 
>only the "default" group with the "unlimited" values.
>A part from that, if i perform a "limit" call, i get this:
># limit
>cputime      unlimited
>filesize     unlimited
>datasize     33554432 kbytes
>stacksize    524288 kbytes
>coredumpsize unlimited
>memoryuse    unlimited
>vmemoryuse   unlimited
>descriptors  45000
>memorylocked unlimited
>maxproc      22500
>sbsize       unlimited
>i've tried to resize datasize and stacksize, but the system won't let me 
>do so.
>any idea how to solve this?

Good luck with your programming and systems work!


[1] <>

More information about the freebsd-questions mailing list