I am writing a code which uses realloc(). The following is a simplified version of the problem. Though the code looks obvious yet it doesn't seem to work.
// Program for implementing variable length integer array.
#include<stdio.h>
#include<stdlib.h>
void add(int* ptr,int len,int ele){
ptr = (int*)realloc(ptr,len);
*(ptr+len-1) = ele;
}
void main(){
int max_len = 10;
int* arr = (int*)malloc(sizeof(int));
for(int i=0;i<max_len;i++)
add(arr,i+1,i+1);
printf("The elements are...\n");
for(int i=0;i<max_len;i++)
printf("%d\n",*(arr+i));
}
The program runs for max_len=8 or low but not beyond it. Why is this happening? Thanks in advance.
A few things:
First, you should pass your array by reference with &. You pass your pointer by value which has no effect.
Second, you forgot to make your realloc with sizeof(int), equivalent to 4.
Third, you have to assign your value the following way: *(*(ptr) + len - 1) = ele;
See the corrected code below:
#include<stdio.h>
#include<stdlib.h>
void add(int** ptr,int len,int ele){
*ptr = (int*)realloc(*ptr,len*sizeof(int));
*(*(ptr) + len - 1) = ele;
}
void main(){
int max_len = 10;
int* arr = (int*)malloc(sizeof(int));
for(int i=0;i<max_len;i++)
add(&arr,i+1,i);
printf("The elements are...\n");
for(int i=0;i<max_len;i++)
printf("%d\n",arr[i]);
}
output:
0
1
2
3
4
5
6
7
8
9