Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 6846123
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 27, 20262026-05-27T00:35:01+00:00 2026-05-27T00:35:01+00:00

After checked my code with Valgrind, it shows a lot of error messages and

  • 0

After checked my code with Valgrind, it shows a lot of error messages and information and I am not sure about how to find and remove the errors in code?

My source code is as follows.

myheader.h

 #include<stdlib.h>
 #define MAX 15
 typedef enum
 {
  METROPOLITAN_AREA,
  TOURIST_AREA,
 }area_type_t;

 typedef struct
 {
  int population;
  int area;
 }metropolitan_t;

 typedef struct
 {
  char *type_place;
  char *near_airport;
 }tourist_t;

 typedef struct
 {
  char *name;
  char *country;
  area_type_t area_t;
  union
  {
      metropolitan_t metro;
      tourist_t   tourist;
  }u;

 }*place_t;
 extern void get_input(place_t);

getinput.c

#include<myheader.h>
void get_input(place_t place)
{
 int check=1;
 int num,i,ch;
 printf("\nEnter the no of records : \n");
 scanf("%d",&num);
 place=(place_t)malloc(sizeof(place_t)*num);
 if(NULL==place)
 {
  printf("\nMemory allocation failed\n");
  exit(1);
 }
 for(i=0;i<num;i++)
 {
  printf("\nEnter the place name : ");
  place->name=(char *)malloc(sizeof(char)*MAX);
  if(NULL==place->name)
  {
   free(place);
   printf("\nMemory allocation failed\n");
   exit(1);
  }
  scanf("%s",place->name);
  printf("\nEnter the coutry name : ");
  place->country=(char *)malloc(sizeof(char)*MAX);
  if(NULL==place->country)
  {
   free(place);
   free(place->name);
   printf("Memory allocation failed\n");
   exit(1);
  }
  scanf("%s",place->country);
   printf("\nPlease Enter '0' if the place is Metropolitan, '1' if the place Tourist place\n");
   scanf("%d",&ch);
  while(check)
  {
   switch(ch)
   {
    case 0:
     check=0;
     place->area_t=METROPOLITAN_AREA;
     break;
    case 1:
     check=0;
     place->area_t=TOURIST_AREA;
      break;
    default:
     printf("\nPlease enter valid choice \n");
   }
  }
  if(place->area_t==METROPOLITAN_AREA)
  {
    printf("\nEnter the population of the place : ");
    scanf("%d",&(place->u.metro.population));
    printf("\nEnter the area of place :"); 
    scanf("%d",&(place->u.metro.area));
  } else
  {
   printf("\nEnter the nearest airport name : ");
   place->u.tourist.near_airport=(char *)malloc(sizeof(char)*MAX);
   if(NULL==place->u.tourist.near_airport)
   {
    printf("Memory allocation failed\n");
    exit(1);
   }
   scanf("%s",(place->u.tourist.near_airport));
   printf("\nEnter the type of tourist spot : ");
   place->u.tourist.type_place=(char *)malloc(sizeof(char)*MAX);

   if(NULL==place->u.tourist.type_place)
   {
    printf("Memory allocation failed\n");
    exit(1);
   }
   scanf("%s",(place->u.tourist.type_place));
  }
  check=1;
  place++;
 }
}

main.c

#include"myheader.h"
int main()
{
 place_t place;
 get_input(place);
 return 0;
}

Command-line transcript

 bash-3.00$ valgrind --tool=memcheck --leak-check=yes --show-reachable=yes a.out
 ==13514== Memcheck, a memory error detector.
 ==13514== Copyright (C) 2002-2005, and GNU GPL'd, by Julian Seward et al.
 ==13514== Using LibVEX rev 1575, a library for dynamic binary translation.
 ==13514== Copyright (C) 2004-2005, and GNU GPL'd, by OpenWorks LLP.
 ==13514== Using valgrind-3.1.1, a dynamic binary instrumentation framework.
 ==13514== Copyright (C) 2000-2005, and GNU GPL'd, by Julian Seward et al.
 ==13514== For more details, rerun with: -v
 ==13514==

 Enter the no of records :
 2

 Enter the place name : Banglore

 Enter the coutry name : India

 Please Enter '0' if the place is Metropolitan, '1' if the place Tourist place
 0
 ==13514== Invalid write of size 4
 ==13514==    at 0x400789: get_input (getinput.c:43)
 ==13514==    by 0x4005E8: main (main.c:5)
 ==13514==  Address 0x4A2D040 is 0 bytes after a block of size 16 alloc'd
 ==13514==    at 0x4904A06: malloc (vg_replace_malloc.c:149)
 ==13514==    by 0x400637: get_input (getinput.c:8)
 ==13514==    by 0x4005E8: main (main.c:5)
 ==13514==
 ==13514== Invalid read of size 4
 ==13514==    at 0x4007BB: get_input (getinput.c:53)
 ==13514==    by 0x4005E8: main (main.c:5)
 ==13514==  Address 0x4A2D040 is 0 bytes after a block of size 16 alloc'd
 ==13514==    at 0x4904A06: malloc (vg_replace_malloc.c:149)
 ==13514==    by 0x400637: get_input (getinput.c:8)
 ==13514==    by 0x4005E8: main (main.c:5)

 Enter the population of the place : 303030

 Enter the area of place :2500
 ==13514==
 ==13514== Invalid write of size 8
 ==13514==    at 0x40068C: get_input (getinput.c:17)
 ==13514==    by 0x4005E8: main (main.c:5)
 ==13514==  Address 0x4A2D058 is not stack'd, malloc'd or (recently) free'd
 ==13514==
 ==13514== Invalid read of size 8
 ==13514==    at 0x400693: get_input (getinput.c:18)
 ==13514==    by 0x4005E8: main (main.c:5)
 ==13514==  Address 0x4A2D058 is not stack'd, malloc'd or (recently) free'd
 ==13514==
 ==13514== Invalid read of size 8
 ==13514==    at 0x4006BF: get_input (getinput.c:24)
 ==13514==    by 0x4005E8: main (main.c:5)
 ==13514==  Address 0x4A2D058 is not stack'd, malloc'd or (recently) free'd

 Enter the place name : London

==13514==
 ==13514== Invalid write of size 8
 ==13514==    at 0x4006EE: get_input (getinput.c:26)
 ==13514==    by 0x4005E8: main (main.c:5)
 ==13514==  Address 0x4A2D060 is 16 bytes before a block of size 15 alloc'd
 ==13514==    at 0x4904A06: malloc (vg_replace_malloc.c:149)
 ==13514==    by 0x40068B: get_input (getinput.c:17)
 ==13514==    by 0x4005E8: main (main.c:5)
 ==13514==
 ==13514== Invalid read of size 8
 ==13514==    at 0x4006F6: get_input (getinput.c:27)
 ==13514==    by 0x4005E8: main (main.c:5)
 ==13514==
 ==13514== Invalid read of size 8
 ==13514==    at 0x4006F6: get_input (getinput.c:27)
 ==13514==    by 0x4005E8: main (main.c:5)
 ==13514==  Address 0x4A2D060 is 16 bytes before a block of size 15 alloc'd
 ==13514==    at 0x4904A06: malloc (vg_replace_malloc.c:149)
 ==13514==    by 0x40068B: get_input (getinput.c:17)
 ==13514==    by 0x4005E8: main (main.c:5)
 ==13514==
 ==13514== Invalid read of size 8
 ==13514==    at 0x40072F: get_input (getinput.c:34)
 ==13514==    by 0x4005E8: main (main.c:5)
 ==13514==  Address 0x4A2D060 is 16 bytes before a block of size 15 alloc'd
 ==13514==    at 0x4904A06: malloc (vg_replace_malloc.c:149)
 ==13514==    by 0x40068B: get_input (getinput.c:17)
 ==13514==    by 0x4005E8: main (main.c:5)

 Enter the coutry name : London

 Please Enter '0' if the place is Metropolitan, '1' if the place Tourist place
 1
 ==13514==
 ==13514== Invalid write of size 4
 ==13514==    at 0x40079D: get_input (getinput.c:47)
 ==13514==    by 0x4005E8: main (main.c:5)
 ==13514==  Address 0x4A2D068 is 8 bytes before a block of size 15 alloc'd
 ==13514==    at 0x4904A06: malloc (vg_replace_malloc.c:149)
 ==13514==    by 0x40068B: get_input (getinput.c:17)
 ==13514==    by 0x4005E8: main (main.c:5)

 ==13514==
 ==13514== Invalid write of size 8
 ==13514==    at 0x40082F: get_input (getinput.c:62)
 ==13514==    by 0x4005E8: main (main.c:5)
 ==13514==  Address 0x4A2D078 is 8 bytes inside a block of size 15 alloc'd
 ==13514==    at 0x4904A06: malloc (vg_replace_malloc.c:149)
 ==13514==    by 0x40068B: get_input (getinput.c:17)
 ==13514==    by 0x4005E8: main (main.c:5)
 ==13514==
 ==13514== Invalid read of size 8
 ==13514==    at 0x400837: get_input (getinput.c:63)
 ==13514==    by 0x4005E8: main (main.c:5)
 ==13514==  Address 0x4A2D078 is 8 bytes inside a block of size 15 alloc'd
 ==13514==    at 0x4904A06: malloc (vg_replace_malloc.c:149)
 ==13514==    by 0x40068B: get_input (getinput.c:17)
 ==13514==    by 0x4005E8: main (main.c:5)
 ==13514==
 ==13514== Invalid read of size 8
 ==13514==    at 0x40085B: get_input (getinput.c:68)
 ==13514==    by 0x4005E8: main (main.c:5)
 ==13514==  Address 0x4A2D078 is 8 bytes inside a block of size 15 alloc'd
 ==13514==    at 0x4904A06: malloc (vg_replace_malloc.c:149)
 ==13514==    by 0x40068B: get_input (getinput.c:17)
 ==13514==    by 0x4005E8: main (main.c:5)

 Enter the nearest airport name : London

 Enter the type of tourist spot : Entertainment

 ==13514==
 ==13514== ERROR SUMMARY: 13 errors from 12 contexts (suppressed: 4 from 1)
 ==13514== malloc/free: in use at exit: 106 bytes in 7 blocks.
 ==13514== malloc/free: 7 allocs, 0 frees, 106 bytes allocated.
 ==13514== For counts of detected errors, rerun with: -v
 ==13514== searching for pointers to 7 not-freed blocks.
 ==13514== checked 75,768 bytes.
 ==13514==
 ==13514==
 ==13514== 15 bytes in 1 blocks are indirectly lost in loss record 1 of 7
 ==13514==    at 0x4904A06: malloc (vg_replace_malloc.c:149)
 ==13514==    by 0x40088A: get_input (getinput.c:70)
 ==13514==    at 0x4904A06: malloc (vg_replace_malloc.c:149)
 ==13514==    by 0x40088A: get_input (getinput.c:70)
 ==13514==    by 0x4005E8: main (main.c:5)
 ==13514==
 ==13514==
 ==13514== 15 bytes in 1 blocks are definitely lost in loss record 2 of 7
 ==13514==    at 0x4904A06: malloc (vg_replace_malloc.c:149)
 ==13514==    by 0x40082E: get_input (getinput.c:62)
 ==13514==    by 0x4005E8: main (main.c:5)
 ==13514==
 ==13514==
 ==13514== 15 bytes in 1 blocks are definitely lost in loss record 3 of 7
 ==13514==    at 0x4904A06: malloc (vg_replace_malloc.c:149)
 ==13514==    by 0x4006ED: get_input (getinput.c:26)
 ==13514==    by 0x4005E8: main (main.c:5)
 ==13514==
 ==13514==
 ==13514== 15 bytes in 1 blocks are definitely lost in loss record 4 of 7
 ==13514==    at 0x4904A06: malloc (vg_replace_malloc.c:149)
 ==13514==    by 0x40068B: get_input (getinput.c:17)
 ==13514==    by 0x4005E8: main (main.c:5)
 ==13514==
 ==13514==
 ==13514== 15 bytes in 1 blocks are indirectly lost in loss record 5 of 7
 ==13514==    at 0x4904A06: malloc (vg_replace_malloc.c:149)
 ==13514==    by 0x4006ED: get_input (getinput.c:26)
 ==13514==    by 0x4005E8: main (main.c:5)
 ==13514==
 ==13514==
 ==13514== 15 bytes in 1 blocks are indirectly lost in loss record 6 of 7
 ==13514==    at 0x4904A06: malloc (vg_replace_malloc.c:149)
 ==13514==    by 0x40068B: get_input (getinput.c:17)
 ==13514==    by 0x4005E8: main (main.c:5)
 ==13514==
 ==13514==
 ==13514==
 ==13514== 61 (16 direct, 45 indirect) bytes in 1 blocks are definitely lost in loss record 7 of 7
 ==13514==    at 0x4904A06: malloc (vg_replace_malloc.c:149)
 ==13514==    by 0x400637: get_input (getinput.c:8)
 ==13514==    by 0x4005E8: main (main.c:5)
 ==13514==
 ==13514== LEAK SUMMARY:
 ==13514==    definitely lost: 61 bytes in 4 blocks.
 ==13514==    indirectly lost: 45 bytes in 3 blocks.
 ==13514==      possibly lost: 0 bytes in 0 blocks.
 ==13514==    still reachable: 0 bytes in 0 blocks.
 ==13514==         suppressed: 0 bytes in 0 blocks.

How can I resolve this and make my program more memory-efficient? Is there anything wrong in the malloc() statements that I used?

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-27T00:35:02+00:00Added an answer on May 27, 2026 at 12:35 am

    The first thing to do is get rid of all the memory error(buffer overruns). The first error occurs in get_input.c at line 45, so go to that line and figure out what’s going wrong.

    One thing that’s surely going wrong is this

     place=(place_t)malloc(sizeof(place_t)*num);
    

    You’re allocating a place_t , however you have defined a place_t as this:

    typedef struct
    {
    
     }*place_t;
    

    i.e. a place_t is just a pointer. That means that e.g. malloc(sizeof(place_t)) just allocates space for a pointer, not for a whole place_t. Don’t hide structs names as pointers with a typedef, but if you must, change your malloc statement to

         place=(place_t)malloc(sizeof *place)*num);
    

    Another problem is that you free() the struct and afterwards try to access a member inside it, which is invalid.

    free(place);
    free(place->name);
    

    You have to do it in this order

    free(place->name);
    free(place);
    

    You are also leaking memory e.g. here:
    for(i=0;iname=(char *)malloc(sizeof(char)*MAX);

    What happens the 2. time in this loop ? You assign to place->name , losing the pointer to the memory you allocated in the first iteration of the loop. Maybe you meant to use place[num] inside the loop as you do try to allocate many place_t’s in the place=(place_t)malloc(sizeof(place_t)*num); statement.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

After watching: The Clean Code Talks -- Inheritance, Polymorphism, & Testing I checked my
After having checked extensively for an answer to this question, I still cannot find
why my code is not working? I have called a javascript function after page
I have unexpected assertions faillures in my code using a checked STL implentation. After
After some use Visual Studio 2008 when opening a solution that is checked into
After reading a bit more about how Gnutella and other P2P networks function, I
I checked in some code and my build was added to the build queue.
After doing my research, I could not get an answer for this question: When
I got the code for showing activity indicator in a webview. I checked more
I code this function which converts all pipes into commas, and after that converting

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.