簡體   English   中英

從C向Obj-C結構分配值

[英]Assign values to Obj-C struct from C

我在頭文件中聲明我的結構,如下所示:

typedef struct MyStruct{
    int test;
} MyStruct;

@interface StructTestingFile
MyStruct *originalStruct;
@end

然后從.mm文件中,我調用

originalStruct = loadTestInt();

在C文件中,這是我正在做的事情:

extern "C" MyStruct* loadTestInt()
{
    MyStruct *aStruct;

    aStruct->test = 1;

    return aStruct;
}

每次在分配aStruct->test = 1時崩潰。 我做錯了什么?

您正在創建一個指針,但沒有為結構本身分配內存。

MyStruct *aStruct;

aStruct = (MyStruct*)malloc(sizeof(MyStruct));

aStruct->test = 1;

取消引用未初始化的指針會導致未定義的行為。 執行該分配時, aStruct不會指向任何內容。 分配一些空間,您就可以參加比賽了:

extern "C" MyStruct* loadTestInt()
{
  MyStruct *aStruct = malloc(sizeof(MyStruct));
  aStruct->test = 1;
  return aStruct;
}

到目前為止,其他答案都指出了使用指針而不分配內存的錯誤。

但是,您真的要使用指向結構的指針嗎? 結構是一種值類型(C-ese中的POD),您可以像傳遞整數一樣傳遞它們。 除非您的結構很大,或者標識很重要(使用標識表示兩個指針指向完全​​相同的內存),否則動態分配結構可能只是您不需要的工作-尤其是您稍后必須釋放它。

為了進行比較,下面是沒有指針的代碼:

typedef struct MyStruct
{
   int test;
} MyStruct;

@interface StructTestingFile
{
   MyStruct originalStruct;
}
@end

和:

extern "C" MyStruct loadTestInt()
{
   MyStruct aStruct;

   aStruct.test = 1;

   return aStruct;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM