这里是初学者.这是合法的吗?运行此代码时,我不断收到状态访问冲突:
struct point {
char *x;
char *y;
}
int main()
{
....
struct point *pt;
for (;;)
{
....
pt = process_message(message);
printf("%s",pt->x);
...
}
}
struct point* process_message(char* message)
{
struct point *pt;
pt = malloc(1*sizeof(struct point))
strncpy(pt->x, message, 4);
return pt;
}
Run Code Online (Sandbox Code Playgroud)
编辑
嗨,大家好我做了一些改变......但仍然得到了访问冲突.请指教!
Pab*_*ruz 11
你需要为struct pointin 分配内存process_message.
像这样的东西:
struct point* process_message(char* message)
{
struct point *pt;
pt = malloc(1*sizeof(struct point));
// ... do some processing ...
return pt;
}
Run Code Online (Sandbox Code Playgroud)
当然,你应该free在之后的某个点指针.
你也应该返回struct point在process_message或检查你的类型一致.如果你仔细观察,你会发现你正在回归,struct price*但你期待(在主叫方面)a struct point *.
更新:
现在该问题已更新,您还需要为其分配内存char *x,char *y 如果您想这样做:
strncpy(pt->x, message, 4);
Run Code Online (Sandbox Code Playgroud)
我建议阅读一些(或很多)有关内存管理和C++指针的内容.指针不是用C编程语言处理数据的唯一方法.
(没有错误检查代码是否简单)
你的main功能还可以.您的问题在于process_message,您正在使用指向结构的指针但不为其分配任何内存,访问它,然后返回它.单独声明指针不会创建用于保存结构的内存.因此,您应该malloc为结构分配(例如使用)内存,以便在函数结束后"存在"内存.然后你就可以在你做的时候将指针返回给它,然后free当你完成它时你会把它指向它.
考虑到您正在进行的简单操作,可能有更好的方法来实现目标.一种方法是在main函数中保留一个"scratch"结构,并将其地址传递给进程消息:
struct point pt;
process_message(message, &pt);
printf("%s", pt.x);
Run Code Online (Sandbox Code Playgroud)
这将"重用"本地内存而不需要alloc/free.请注意,您不返回任何内容,只需在流程函数中"填写"结构.
最后,如果您使用的是现代版本的C,您实际上可以根据需要从函数返回完整结构:
struct point process_message(char* message)
{
struct point pt;
... do some processing ...
return pt;
}
Run Code Online (Sandbox Code Playgroud)
并称之为:
struct point pt = process_message(message);
Run Code Online (Sandbox Code Playgroud)