我在头文件中声明我的结构如下:
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
时崩溃。我做错了什么?
答案 0 :(得分:4)
您正在创建指针但不为结构本身分配内存;
MyStruct *aStruct;
aStruct = (MyStruct*)malloc(sizeof(MyStruct));
aStruct->test = 1;
答案 1 :(得分:2)
取消引用未初始化的指针会导致未定义的行为。执行该任务时aStruct
并未指出任何内容。分配一些空间,你将参加比赛:
extern "C" MyStruct* loadTestInt()
{
MyStruct *aStruct = malloc(sizeof(MyStruct));
aStruct->test = 1;
return aStruct;
}
答案 2 :(得分:2)
到目前为止,其他答案都指出了使用指针而不是分配内存的错误。
但是你真的想要使用指向你的结构的指针吗? struct是一个值类型(C-ese中的POD),你可以像传递一样整数来传递它们。除非您的结构很大,或者 identity 很重要(使用identity表示两个指针指的是完全相同的内存),动态分配结构可能只是您不需要的工作 - 尤其是当您以后必须释放它。
为了比较,这里是没有指针的代码:
typedef struct MyStruct
{
int test;
} MyStruct;
@interface StructTestingFile
{
MyStruct originalStruct;
}
@end
和
extern "C" MyStruct loadTestInt()
{
MyStruct aStruct;
aStruct.test = 1;
return aStruct;
}