Ваш код возвращает 11, но это просто совпадение . В общем, вы получаете неопределенное поведение.
Проблема в том, что в C строка завершена нулем . Это означает, что символ \ 0 обозначает конец строки.
int main(){
char *ptr = (char*)malloc(11);
ptr[10]=0;
printf("%d",strlen(ptr));
}
Это вернет значение <= 10. Всегда. </p>