I know this code is wrong, what I want to know is why.
int main() {
size_t size = sizeof(double);
int items = 4;
int iterations = 5; // out of pointers
double * values = malloc(items * size);
double * values2 = malloc(items * size);
printf("size: %ld\n", size);
printf("start at: %p ; end at: %p\n", values, &*(values + items));
printf("start at: %p ; end at: %p\n", values2, &*(values2 + items));
printf("\nValues");
for (int i = 0; i < iterations; i++) {
values[i] = I;
printf("%p -> ", &values[i]);
printf("%f\n", values[i]); -> i = 4: Out (OK)
}
printf("\n\n");
printf("Values 2\n");
for (int i = 0; i < iterations; i++) {
values2[i] = i;
printf("%p -> ", &values2[i]);
printf("%f\n", values2[i]); //i = 4: Out (EXC_BAD_ACCESS)
}
free(values);
free(values2);
return 0;
}
When I execute this code, values's for loop passed without problem, but when reach the second for loop, values2 fail. even if it run values2's for loop before.