Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C / C++ / MFC
  4. free() problem

free() problem

Scheduled Pinned Locked Moved C / C++ / MFC
helpperformancequestion
3 Posts 3 Posters 1 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • A Offline
    A Offline
    Anonymous
    wrote on last edited by
    #1

    #include #include int main() { int nFibo = 0; int *FiboArray; int loop = 0; printf("How many Fibonacci numbers do you want to see?\n"); scanf("%d", &nFibo); if (nFibo == 0) exit(0); else { FiboArray =(int *)malloc(nFibo); if( FiboArray == NULL ) printf( "Insufficient memory available\n" ); else { printf("0 1 "); FiboArray[0] = 0; FiboArray[1] = 1; for (loop = 2; loop < nFibo ;loop ++) { FiboArray[loop] = FiboArray[loop-1] + FiboArray[loop-2]; printf("%d ", FiboArray[loop]); } printf(" \n"); } free(FiboArray); return (0); } } <\p> //Hi all, This little program gives me a run time error at the line that has free(FiboArray) Does anyone know what the problem is? thanks

    C B 2 Replies Last reply
    0
    • A Anonymous

      #include #include int main() { int nFibo = 0; int *FiboArray; int loop = 0; printf("How many Fibonacci numbers do you want to see?\n"); scanf("%d", &nFibo); if (nFibo == 0) exit(0); else { FiboArray =(int *)malloc(nFibo); if( FiboArray == NULL ) printf( "Insufficient memory available\n" ); else { printf("0 1 "); FiboArray[0] = 0; FiboArray[1] = 1; for (loop = 2; loop < nFibo ;loop ++) { FiboArray[loop] = FiboArray[loop-1] + FiboArray[loop-2]; printf("%d ", FiboArray[loop]); } printf(" \n"); } free(FiboArray); return (0); } } <\p> //Hi all, This little program gives me a run time error at the line that has free(FiboArray) Does anyone know what the problem is? thanks

      C Offline
      C Offline
      Chris Losinger
      wrote on last edited by
      #2

      two things : 1. what if nFibo is 1? FiboArray[1] = 1; this will write outside the array. 2. when you use malloc, you have to take into account the size of the objects you are allocating. malloc allocates BYTEs, not objects. so, to allocate nFibo int's, use malloc(nFibo * sizeof(int). -c


      Greenspun's Tenth Rule of Programming: "Any sufficiently complicated C or Fortran program contains an ad-hoc, informally-specified bug-ridden slow implementation of half of Common Lisp."

      1 Reply Last reply
      0
      • A Anonymous

        #include #include int main() { int nFibo = 0; int *FiboArray; int loop = 0; printf("How many Fibonacci numbers do you want to see?\n"); scanf("%d", &nFibo); if (nFibo == 0) exit(0); else { FiboArray =(int *)malloc(nFibo); if( FiboArray == NULL ) printf( "Insufficient memory available\n" ); else { printf("0 1 "); FiboArray[0] = 0; FiboArray[1] = 1; for (loop = 2; loop < nFibo ;loop ++) { FiboArray[loop] = FiboArray[loop-1] + FiboArray[loop-2]; printf("%d ", FiboArray[loop]); } printf(" \n"); } free(FiboArray); return (0); } } <\p> //Hi all, This little program gives me a run time error at the line that has free(FiboArray) Does anyone know what the problem is? thanks

        B Offline
        B Offline
        Bill Wilson
        wrote on last edited by
        #3

        In addition to Chris' suggestions, you need to allocate nFibo+1 elelents. FiboArray[0] is element #1 FiboArray[1] is element #2 so minimum allocation is 2 = (nFibo=1) + 1 (like Chris said) FiboArray[2[ is element #3 so minimum allocation is 3 = (nFibo=2) + 1 & etc.

        1 Reply Last reply
        0
        Reply
        • Reply as topic
        Log in to reply
        • Oldest to Newest
        • Newest to Oldest
        • Most Votes


        • Login

        • Don't have an account? Register

        • Login or register to search.
        • First post
          Last post
        0
        • Categories
        • Recent
        • Tags
        • Popular
        • World
        • Users
        • Groups