我试图知道我做错了什么因为控制台给了我一个EXC_BAD_ACCESS,就在我指向下方的臂线上。 任何指向解决方案的人都可以提供帮助,因为我不明白为什么要给我这个错误。
感谢。
/*
* Copyright (c) 1999-2007 Apple Inc. All rights reserved.
*/
#ifndef _OS_OSBYTEORDERARM_H
#define _OS_OSBYTEORDERARM_H
#include <stdint.h>
#include <arm/arch.h> /* for _ARM_ARCH_6 */
#if !defined(OS_INLINE)
# if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
# define OS_INLINE static inline
# else
# define OS_INLINE static __inline__
# endif
#endif
* Generic byte swapping functions. */
OS_INLINE
uint16_t
_OSSwapInt16(
uint16_t data
)
{
#if defined(__llvm__)
data = (data << 8 | data >> 8);
#elif defined(_ARM_ARCH_6)
__asm__ ("rev16 %0, %1\n" : "=l" (data) : "l" (data)); <- This is the line pointed by the compiler
答案 0 :(得分:1)
您写道:
&lt; - 这是编译器指出的行
因此你说在编译期间发生了EXC_BAD_ACCESS。如果编译器在其工作期间抛出了这样的异常,它会抛弃它并让我更好。
答案 1 :(得分:0)
我不确切知道,但我只是想知道错误意味着您正在尝试访问空指针。
答案 2 :(得分:0)
我怀疑问题出在你正在使用的短(16位)数据类型中。为了测试,请尝试32位。
另外,我从未使用过rev16,但我怀疑这是你需要的预期功能。
uint32_t data2;
data2 = data;
__asm__ ("rev16 %0, %1\n" : "=l" (data2) : "l" (data2)); <- This is the line pointed by
答案 3 :(得分:0)
您正在尝试交换16位整数的字节(或者您正在使用的方法尝试交换16位整数的字节),但整数驻留在您不拥有的内存中。它可能位于NULL
地址,也可能位于最近解除分配的地址中。