[英]Objective-C++ assigning values to OBj-C properties from C++ object
[英]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.