2012-03-28 30 views
0

我想知道我做錯了什麼,因爲控制檯給了我一個EXC_BAD_ACCESS,就在我指向下方的手臂線上。 任何指向解決方案都可能有幫助,因爲我不明白爲什麼要給我這個錯誤。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 
+1

你是否啓用殭屍檢測? – Adis 2012-03-28 13:15:55

+2

什麼是回溯模式? – mattjgalloway 2012-03-28 13:27:23

回答

1

您寫道:

< - 這是由編譯器

指出與其你說的那個EXC_BAD_ACCESS編譯過程中出現線。如果編譯器在工作期間拋出了這樣的異常,它會轉儲它並讓我更好。

0

我並不確切知道,但我給你剛纔的想法的錯誤意味着你正在嘗試訪問空指針。

0

我懷疑問題出在您正在使用的短(16位)數據類型。爲了測試而嘗試使用32位。

此外,我從來沒有使用rev16,但我懷疑這是您需要的預期功能。

uint32_t  data2; 
    data2 = data; 
    __asm__ ("rev16 %0, %1\n" : "=l" (data2) : "l" (data2)); <- This is the line pointed by 
0

您正在嘗試換一個16位整數的字節(或你正在使用正試圖換一個16位整數的字節的方法),但整數駐留在內存中,你不擁有。它可能位於NULL地址,或者它可能位於最近被解除分配的地址中。