EXC_BAD_ACCESS указывает мне на строку кода - PullRequest
0 голосов
/ 28 марта 2012

Я пытаюсь понять, что я делаю неправильно, потому что консоль дает мне 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

Ответы [ 4 ]

1 голос
/ 20 марта 2014

Вы писали:

<- это строка, указанная компилятором </p>

При этом вы говорите, что EXC_BAD_ACCESS происходит во время компиляции. Если компилятор выбрасывает такое исключение во время своей работы, он сбросит его и получит мне лучшее.

0 голосов
/ 13 апреля 2012

Я подозреваю, что проблема в том, что вы используете короткий (16-битный) тип данных. Попробуйте 32-битный для тестирования.

Кроме того, я никогда не использовал rev16, но я сомневаюсь, что это именно та функция, которая вам нужна.

   uint32_t        data2;
   data2 = data;
   __asm__ ("rev16 %0, %1\n" : "=l" (data2) : "l" (data2));   <- This is the line pointed by
0 голосов
/ 13 апреля 2012

Вы пытаетесь обменять байты 16-разрядного целого числа (или метод, который вы используете, пытается заменить байты 16-разрядного целого числа), но это целое число находится в памяти, которой вы не владеете.Это может быть адрес NULL или адрес, который был недавно освобожден.

0 голосов
/ 28 марта 2012

Я не знаю точно, но я даю вам только понять, что ошибка означает, что вы пытаетесь получить доступ к нулевому указателю.

...