I'm trying to create an array using a pointer and malloc() function, then initialising it through a for loop, however not all the values are initialised and some seem to be treated in a different way which I don't understand.
In the first version I had written the for loop without the cast, which led to a warning: comparison between signed and unsigned integer expressions when compiling with -Wall -Wextra, and gave the same result anyway at the execution.
#include <stdio.h>
#include <stdlib.h>
#define N 50
#define SIZE sizeof(int)
void afficher (int *p) /* just to display the values of the array*/
{
int i;
for (i=0; i<=(int) ((N-1)*SIZE); i+=SIZE)
{
printf("%d ", *(p+i));
}
printf("\n\n");
}
int main()
{
int * pointer = NULL;
int i;
pointer = malloc (N*SIZE);
afficher(pointer); /*first display before initialising*/
if (pointer)
{
for (i=0; i<=(int)((N-1)*SIZE); i+=SIZE)
{
*(pointer+i) = 1; /*trying to initialise all values to 1 */
}
}
afficher(pointer); /*second display*/
free(pointer);
return 0;
}
So, while I'm expecting the first display to show whatever was in memory before the program starts, I'd like all the values to be 1 at the second display, however what I'm getting is
0 0 0 0 0 0 0 0 0 0 0 0 0 540024880 540024880 540031032 825438256 8246 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1 1 1 540090417 540090417 540487988 926430256 8246 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
Even though the first display is a bit weird, I don't think it should cause an issue when I try to change the values and I have no idea why these values in the middle won't be changed to 1 like the others.