Here is an example code:
int* arr = (int*)malloc(2 * sizeof(int));
arr = arr 1;
*arr = 11;
arr[-1] = 22;
int x = arr[0]; // x = 11
int y = arr[1]; // y = 194759710
After a memory allocation arr
pointer is incremented. I have expected to get the following results:
x == 22
y == 11
Could you explain how it works ?
CodePudding user response:
The y
assignment is incorrect. You only have 2 allocated items so you cannot first increment the pointer by one, then de-reference that pointer with [1]
, because that gives a 3rd element which doesn't exist.
CodePudding user response:
When you set x
and y
, you forgot that arr
no longer points on allocated memory.
This code do what you want:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int* arr = (int*)malloc(2 * sizeof(int));
int *original = arr;
arr = arr 1;
*arr = 11;
arr[-1] = 22;
int x = original [0]; // x = arr[-1]
int y = original [1]; // y = arr[0]
printf("%d, %d\n", x, y);
}