帮助结构和C语言循环

del*_*ita 2 c struct

这里是初学者.这是合法的吗?运行此代码时,我不断收到状态访问冲突:

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 pointprocess_message或检查你的类型一致.如果你仔细观察,你会发现你正在回归,struct price*但你期待(在主叫方面)a struct point *.

更新:

现在该问题已更新,您还需要为其分配内存char *x,char *y 如果您想这样做:

strncpy(pt->x, message, 4);
Run Code Online (Sandbox Code Playgroud)

我建议阅读一些(或很多)有关内存管理和C++指针的内容.指针不是用C编程语言处理数据的唯一方法.

(没有错误检查代码是否简单)

  • 然后免费吧! (2认同)

Ben*_*tto 5

你的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)