Czy nieobciążone obciążenie spowodowane odrzutem z nieokreślonego zachowania?Czy jest źle ustawione obciążenie z powodu nieokreślonego działania przesyłania?
Oto co widzę z Clang i jego odkażających:
bufhelp.h:146:29: runtime error: load of misaligned address 0x7fff04fdd0e1 for type 'const uintptr_t' (aka 'const unsigned long'), which requires 8 byte alignment
0x7fff04fdd0e1: note: pointer points here
00 00 00 66 66 6f 6f 62 61 72 34 32 46 4f 4f 42 41 52 31 37 66 6f 6f 62 61 72 34 33 46 4f 4f 42
^
A oto gdzie obsada wchodzi w grę:
buf_xor(void *_dst, const void *_src1, const void *_src2, size_t len)
{
...
ldst = (uintptr_t *)(void *)dst;
lsrc1 = (const uintptr_t *)(const void *)src1;
lsrc2 = (const uintptr_t *)(const void *)src2;
for (; len >= sizeof(uintptr_t); len -= sizeof(uintptr_t))
*ldst++ = *lsrc1++^*lsrc2++;
...
}
pokrewnych, ale don” t wierzyć odpowiedzi na powyższe pytanie:
- What is a misaligned pointer?
- Type punning and Unions in C
- Type punning with void * without breaking the strict aliasing rule in C99
Całkowicie zależy od tego, co zostanie wyświetlone w tej funkcji jako parametry. Nie widząc kodu wywołującego, nie można odpowiedzieć na to pytanie. – Lundin
@Lundin - czy tak jest w przypadku? Clang już powiadomił o adresie 0x7fff04fdd0e1. Czy '0xXXXXXXX1' może być' uintptr_t * 'użytym w pętli? Czy też niepoprawnie przetwarzam dane wyjściowe Clanga? – jww
Tak, ale _ dlaczego to XXX1? Musisz przekazać wskaźnik char lub coś do funkcji. W zamieszczonym kodzie nie ma nic, co powodowałoby niewspółosiowość, ponieważ wszystkie arytmetyczne wskaźniki, które tam wykonujesz, są oparte na poprawnym typie. – Lundin