Код обращается к данным за пределами массива.Это приводит к неопределенному поведению: https://en.wikipedia.org/wiki/Undefined_behavior.
Вы вычисляете количество элементов массива и добавляете 1. Вам нужно удалить + 1, чтобы он выглядел так:
for(int i = 0; i < (sizeof(my_array) / sizeof( my_array[0])); i++)
Я просто немного изменил ваш код и сделал из него самодостаточный пример:
#include <stdio.h>
int main() {
char *my_array[] = {"abc", "def"};
int length = (sizeof(my_array) / sizeof(my_array[0]));
printf("%d\n", length);
for (int i = 0; i < length; i++) {
printf("%s\n", my_array[i]);
}
return 0;
}
Он выдает на консоль следующее:
2
abc
def
Итаквсе элементы печатаются при снятии + 1.