C 无法从指针读取值
无法从无效指针读取数据:C 无法从指针读取值,c,pointers,void-pointers,C,Pointers,Void Pointers,无法从无效指针读取数据: #include <windows.h> typedef enum { ADDRESS, PERSON, } DataType; typedef struct { DataType type; void* data; } Data; Data* create_data(DataType type, void* data); typedef struct { char* number; char* str
#include <windows.h>
typedef enum {
ADDRESS,
PERSON,
} DataType;
typedef struct {
DataType type;
void* data;
} Data;
Data* create_data(DataType type, void* data);
typedef struct {
char* number;
char* street;
char* city;
char* state;
char* postalCode;
} Address;
typedef struct {
int age;
char* name;
} Person;
int CALLBACK WinMain(
HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nShowCmd
) {
// WRITE
Address* home = malloc(sizeof(Address));
home->number = "123";
home->street = "Main";
home->city = "New York";
home->state = "NY";
home->postalCode = "10001";
Data* addressdata = create_data(ADDRESS, &home);
// READ
char* addressstreet = ((Address*)addressdata->data)->street;
}
Data* create_data(DataType type, void* data)
{
Data* d = (Data*)malloc(sizeof(Data));
d->type = type;
d->data = data;
return d;
}
#包括
类型定义枚举{
住址
人
}数据类型;
类型定义结构{
数据类型;
作废*数据;
}数据;
数据*创建_数据(数据类型,void*数据);
类型定义结构{
字符*数字;
查*街;
查尔*城市;
字符*状态;
字符*后代码;
}地址;
类型定义结构{
智力年龄;
字符*名称;
}人;
int回调WinMain(
HINSTANCE HINSTANCE,
HINSTANCE HPPrevenstance,
LPSTR lpCmdLine,
int nShowCmd
) {
//写
地址*home=malloc(sizeof(地址));
主页->编号=“123”;
home->street=“Main”;
主页->城市=“纽约”;
主页->状态=“纽约”;
主页->postalCode=“10001”;
数据*地址数据=创建数据(地址和主页);
//阅读
char*addressstreet=((Address*)addressdata->data)->street;
}
数据*创建_数据(数据类型,void*数据)
{
数据*d=(数据*)malloc(sizeof(数据));
d->type=type;
d->data=数据;
返回d;
}
读完你的问题后,我脑海中浮现的第一件事是,既然一个空指针没有对象类型,你怎么能取消它的引用呢 中存在
参数
不匹配
Data*创建_数据(数据类型,void*数据)代码>和数据*地址数据=创建数据(地址和主页)代码>
而不是发送主页的地址
,即创建_数据(地址和主页)代码>发送创建_数据(地址、家庭)代码>创建数据(地址和家庭)
这将地址**
传递到呼叫中。您可能只需要home
here.changecreate\u数据(地址,&home)代码>创建数据(地址、家庭)
将解决问题Read,在编译器中启用所有警告和调试信息,请参阅