在非常基本的程序中,Canon EDSDK在Mac OS 10.7.5上与EXC_BAD_ACCESS崩溃

时间:2013-04-10 07:01:31

标签: objective-c c edsdk

我正在尝试编写一个基于控制台的应用程序来访问Mac OS X 10.7.5上的佳能相机。我正在使用XCode版本4.6。这是我想写的程序

#import <Foundation/Foundation.h>
#include "EDSDK.h"
#include "EDSDKErrors.h"
#include "EDSDKTypes.h"


int main()
{
    @autoreleasepool {
        EdsError error = EDS_ERR_OK;
        EdsCameraListRef cameraList = NULL;
        EdsUInt32 count = 0;
        EdsDeviceInfo deviceInfo;
        bool isSDKLoaded;

        // Initialization of SDK
        error = EdsInitializeSDK();

        //Acquisition of camera list
        if(error == EDS_ERR_OK)
        {
            isSDKLoaded = YES;
            error = EdsGetCameraList(&cameraList);
        }
        if(cameraList != NULL) {
            EdsRelease(cameraList);
            cameraList = NULL;
        }

    }
    return 0;
}

它成功编译但是当我运行程序时,它会在EdsGetCameraList函数返回时崩溃。显示的错误是'dyld misaligned_stack_error'。据我所知,这与MacOS X希望堆栈为16字节对齐的事实有关。我使用的SDK仅适用于32位架构,因此我已相应地设置了架构。我尝试在XCode的Build Settings下设置“Other C flags”,以包含标志“-falign-stack = assume-16-byte”。

佳能EDSDK随附的样品工作正常。所用SDK的版本是佳能于2006年至2007年在06-03-16更新的版本。我没有其他版本信息。

以下是日志转储:http://pastebin.com/vfDWeZnr

我可能做错了什么?

我是Objective-C的新手,因此混淆了C和Objective-C代码。

谢谢!

1 个答案:

答案 0 :(得分:0)

您确定不需要初始化cameraList吗?我想这个函数想要写入你提供的地址但指向NULL,因此错误。在C中,我在这里使用malloc()来获取指针,但我不知道Objective-C的等价物。