Malloc function returning NULL


 
Thread Tools Search this Thread
Top Forums Programming Malloc function returning NULL
# 1  
Old 06-12-2013
Malloc function returning NULL

Hi All,

I am using malloc function for allocating dynamic memory.

When I am using below code on Linux server its working fine, but When I am trying the same code on HP UNIX server its returning NULL.

below is a fragment of code in which it is giving problem.

Code:
    tmp = (format_tree *)malloc(sizeof(format_tree));
    if(tmp == NULL)
    {
       printf("Cannot create memory for tmp*2\n");
       exit(EXIT_STATUS_FAILURE);
    }

Any ideas abt this??

Please help me as it is urgent.
# 2  
Old 06-12-2013
Can you post the entire code if it isnt too big...
# 3  
Old 06-12-2013
I would look outside C for the answer. Your account on HPUX may have very stentorian resource limits. What does
Code:
ulimit -a

show on both boxes? Plus
Code:
errno == ENOMEM

if there is nothing wrong other than memory -- my assumption since it works in Linux.

I think you are bumping heads with a memory limit on HPUX. If it is a soft limit try calling setrlimit() to raise it in your code.

Last edited by jim mcnamara; 06-12-2013 at 01:31 PM..
# 4  
Old 06-13-2013
Thnx for the replies guys

@Shamrock
Entire code is actually quite big so can't post it here, although below is the loop
from where I took the fragment earlier. What this loop is doing is, its parsing a CSV file into tree structure
based on some logic.
Code:
while(!(feof(fformat)))
 { 
  i1++;
  if (feof(fformat)) 
  {
     break;
  }
  preseq = curseq; 
  fgets(getline1,max_length,fformat);
  strcpy(chklist,getline1);
 
  curseq = numpts(getline1);
  if(curseq == preseq+1)/* this for child*/
  { //printf("\n chkpt1"); 
   tmp = (format_tree *)malloc(sizeof(format_tree));
      if(tmp == NULL)
      {
      printf("Cannot create memory for tmp*1\n");
      exit(EXIT_STATUS_FAILURE);
      }
   tmp->brother = NULL;    
   tmp->child = NULL;
 
   tmp->level = curseq;
   cur_add->child = tmp;
   tmp->parent = cur_add;
   loadstruct(tmp);  
   cur_add = tmp;
  }
  else
  { //printf("\n chkpt2");  
   if(preseq == curseq)/* this for the same level*/
   { //printf("\n chkpt2.1");
   tmp = (format_tree *)malloc(sizeof(format_tree));
    if(tmp == NULL)
    {
     //tmp = (format_tree *)my_malloc(sizeof(format_tree));
       printf("Cannot create memory for tmp*2\n");
       exit(EXIT_STATUS_FAILURE);
    }
    tmp->brother = NULL;
    tmp->child=NULL;
 
                tmp->level = curseq;
    cur_add->brother = tmp;
          tmp->parent = cur_add->parent;
    loadstruct(tmp);
 
       cur_add = tmp;   
 
   }
   else
   {//printf("\n chkpt3");
    tmp = (format_tree *)malloc(sizeof(format_tree));
    if(tmp == NULL)
    {
       printf("Cannot create memory for tmp*3\n");
       exit(EXIT_STATUS_FAILURE);
    }
    tmp->brother = NULL;
    tmp->child=NULL;
                tmp->level = curseq;
 
    for(i=0;i<(preseq-curseq);i++)
    {
     cur_add = cur_add->parent;
    }
 
    cur_add->brother=tmp;
    tmp->parent = cur_add->parent;  
    loadstruct(tmp);
    cur_add = tmp; 
   }
 
  }
 
 }

@Jim
I executed the command "ulimit -a" on both servers and below are the results:
HPUX:
Code:
uxndap02:/app/rafms>ulimit -a
time(seconds)        unlimited
file(blocks)         unlimited
data(kbytes)         3145728
stack(kbytes)        131072
memory(kbytes)       unlimited
coredump(blocks)     4194303
nofiles(descriptors) 4096

Linux:

Code:
[r@SOURCE]$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 257697
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 16384
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 2047
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

# 5  
Old 06-13-2013
@OP:

I was only interested in the definition of the format_tree structure i.e. what its members are. Also are you compiling the source code for 32 or 64 bit mode and how much physical memory is installed on each of the *nixes...
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Programming

Getpwnam_r returning null with errno 25

I am calling getpwnam_r with all proper argument as below:- rv = getpwnam_r(name, result, buffer, buflen); This program runs fine on sol 8/9/10. But on sol 11 it returns NULL with errno set to 25 (#define ENOTTY 25 /* Inappropriate ioctl for device */) All boxes are... (2 Replies)
Discussion started by: Ranajit
2 Replies

2. UNIX for Advanced & Expert Users

getservbyname returning NULL

OS : Solaris 10 When I try to get the "echo" service port, getservbyname is returning null. I checked - /etc/services having an entry for echo - echo 7/tcp (But still getservbyname returning null) Any other config required to consider? (1 Reply)
Discussion started by: satish@123
1 Replies

3. Programming

Regarding the maximum memory allocated by malloc() function on HP-UX B11.11

In a 'C' program,when I am trying to allocate memory with the help of malloc () function, it is allocating the memory up to a certain limit for e.g. in my case, it is 670 MB (approx). malloc() returns NULL if I allocate more than this amount of memory.When I tried to allocate memory in chunks of... (1 Reply)
Discussion started by: vipinsachan
1 Replies

4. Shell Programming and Scripting

Returning the name of function used

Hi All In my script, I can call on several functions. I have a logging function that is called by any of these functions. What I would like is some way of identifying which function I am using and pass this to the log function as some parameter. Is there some built in command or way of... (3 Replies)
Discussion started by: kingpin2502
3 Replies

5. Shell Programming and Scripting

Script returning null results

Hi, The following shell script returning null results could you please tell me whats the problem in script, ********************************* #!/bin/ksh . $HOME/conf/systemProperties/EnvSetup.properties a=`date +"%y%m%d"` set -x for i in `cat... (2 Replies)
Discussion started by: shivanete
2 Replies

6. Programming

getservbyport - Always returning NULL servent

Hi, I am having an issue using getservbyport. Here is a little program to demonstrate the problem (removed the includes): int main(void) { struct servent *service; int memsize = sizeof(struct servent); service = (struct servent *)malloc(memsize); ... (2 Replies)
Discussion started by: goon12
2 Replies

7. Shell Programming and Scripting

returning from a function

Hi all, I am very new to BASH shell programming. I need to return an integer from a function to the caller function. I did this: but it keeps giving me wrong return: Can someone help me out here, please? Thanks (2 Replies)
Discussion started by: alirezan
2 Replies

8. UNIX for Dummies Questions & Answers

malloc returning NULL if freemem high & swapmem low (MPRAS version 3.03 )

Hi All,:) In my application malloc is returning NULL even though there is sufficient amount of free memory available but the swap memory is low. Is this possible that, if free memory is high & swap memory is low, malloc will not be able to allocate memory & return NULL ? Few details: ... (4 Replies)
Discussion started by: Ritesh Kumar
4 Replies

9. Solaris

malloc returning NULL if freemem high & swapmem low

Hi All, In my application malloc is returning NULL even though there is sufficient amount of free memory is available but swap memory is low. Is this possible that, if free memory is high & swap memory is low, malloc will not be able to allocate memory & return NULL ?:) Kindly look into... (5 Replies)
Discussion started by: Ritesh Kumar
5 Replies

10. Programming

malloc function

Hello This is a simple program i carried out in my machine i dont know how it is working #include<alloc.h> #include<stdio.h> mian() { int *p,j; p= (int*)malloc(1); for(j=1;j<=580;j++) { *p=j; ++p; } p=p-580; for(j=1;j<=580;j++) { printf("%d",*p); } (7 Replies)
Discussion started by: rajashekaran
7 Replies
Login or Register to Ask a Question