Kir*_*kov 0 c abstract-data-type
所以,我正在尝试编写一个函数,该函数在堆中返回指向ADT的指针.
问题是我在内存分配后无法操纵它.这是一个简化的代码
typedef struct _entity {
int value;
} *Entity;
Entity *new_entity() {
Entity *ptr = (Entity*)malloc(sizeof(struct _entity));
assert( ptr );
(*ptr)->value = 5; // program crashes after this line
return ptr;
}
Run Code Online (Sandbox Code Playgroud)
错误是:
test.exe中0x013e1665处的未处理异常:0xC0000005:访问冲突写入位置0xcdcdce21.
typedef struct _entity {
int value;
} *Entity;
^
^
Run Code Online (Sandbox Code Playgroud)
你可能不想要这个*.否则,您将typedefing Entity为指向结构的指针,而不是结构.所以你的代码将成为:
typedef struct _entity {
int value;
} Entity;
Entity *new_entity(void) {
Entity *ptr = malloc(sizeof(*ptr));
assert( ptr );
ptr->value = 5;
return ptr;
}
Run Code Online (Sandbox Code Playgroud)
如果由于某种原因,您确实希望Entity成为指针类型,那么代码的其余部分是错误的.你已经为指针设置了一些空间,但不是它所指向的空间.它需要更像这样:
Entity *ptr = malloc(sizeof(*ptr)); // Allocate an Entity
*ptr = malloc(sizeof(**ptr)); // Allocate a *Entity
Run Code Online (Sandbox Code Playgroud)
但几乎可以肯定没有必要这样做.