free() problem
-
#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
-
#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
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."
-
#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
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.