#include <stdio.h>
#include <stdlib.h>
int main() {
system("clear");
int *pt = malloc(2 * sizeof *pt);
int *tmp = NULL;
int i;
pt[0] = 44;
pt[1] = 9;
printf("pt[0] : %d\n", pt[0]);
printf("pt[1] : %d\n", pt[1]);
tmp = realloc(pt, 3 * sizeof *pt);
if (!tmp) {
printf("merde alors\n");
} else {
pt = tmp;
for (i = 0; i < 5; i++) {
pt[i] = i + 1;
printf("pt[%d] : %d\n", i, pt[i]);
}
}
//the compiler should give me an error here, because I try use an unallocated memory:
printf("pt[%d] : %d\n", i + 8, pt[i + 8]);
free(pt);
return 0;
}
привет всем :) Я не понимаю, как вы видите, я пытаюсь использовать нераспределенную память, поэтому я ожидаю получить агрессивную ошибку от компилятора. извините мой плохой английский язык. спасибо за ваше время :) Valgrind report :Почему компилятор не дает мне ошибку?
Некоторые вещи, которые вам просто нужно отлаживать. Он не может отображать ошибки, которые появляются только во время выполнения. –
Даже если массив был жестко закодирован, компилятор C не будет препятствовать индексированию за пределами его границ. Для указателя компилятор может даже не знать, сколько памяти вы выделите во время выполнения. Это зависит от вас, чтобы проверить индексацию массива. –
В зависимости от вашей среды разработки вы можете найти инструмент отладки, например valgrind. Valgrind может точно определить такие ошибки во время выполнения. http://valgrind.org/ –