0

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.

0 Answers0