将指针复制到c中不工作的结构

将指针复制到c中不工作的结构,c,pointers,C,Pointers,我正在学习C语言中的指针,我在将指针复制到结构中时遇到了问题 ****完整代码: 输出必须是组0-4中相同组的总和。 ex)10120 在 for (int i = 0; i < count; i++) { ..... } for(int i=0;i

我正在学习C语言中的指针,我在将指针复制到结构中时遇到了问题

****完整代码:

输出必须是组0-4中相同组的总和。 ex)10120

for (int i = 0; i < count; i++) {
            .....
        }
for(int i=0;i
部分不起作用。指针“ptr”未复制到“calendar[i].somthing”。
我尝试使用日历[I]。日期='*ptr';但是它也不起作用。

Park,您可能需要清理代码中的这些部分,并可能使用新代码进行编辑,以明确您要完成的任务。首先,让我们看看动态分配内存时的职责

不需要强制执行malloc的返回,这是不必要的。见:

在您编写的任何动态分配内存的代码中,您对所分配的任何内存块都有两项责任:(1)始终为您分配的每个内存块保留一个指向起始地址的指针,这样,(2)在不再需要时可以释放它

int *group;
group = (int *)malloc(sizeof(int) * count);
group = (int *)calloc(count, sizeof(int));
您是否保留了指向已分配的每个块的指针?(提示:否)。在您第一次分配
后,它保存您分配给
malloc
的块中的第一个地址。到目前为止,一切都很好

然后调用
calloc
组分配新的地址。
组持有的旧地址发生了什么变化?您需要保留的一个,以确保可以释放不再需要的内存块。你将如何取回那个地址(提示:你不能让它消失……这就是所谓的内存泄漏)

如果您使用
calloc
进行第二次调用,因为您希望分配的块中的所有字节都初始化为零,那么不要使用
malloc
,只需使用一次调用
calloc
malloc
calloc
同一个指针没有任何理由—无

您使用
日历做了完全相同的事情。由于您做了完全相同的事情,同样的坏结果随之而来

您所需要的只是:

group = calloc (count, sizeof *group);
然后

calendar = calloc (count, sizeof *calendar);
这就引出了一个问题——为什么要使用
malloc
calloc
进行分配?您只需创建一个带有自动存储的整数数组,并以同样的方式创建一个日历实例即可。(无需分配)。在这一点上,这似乎是一种更好的方法。动态分配没有错,您将经常使用它,但考虑到您目前在这一概念上的困难,您可能希望稍后再使用它,只需使用为数组和结构提供的自动存储即可。(考虑到
日历中没有需要进一步分配的内容,这就更有意义了)


最后,使用
strtok
(或对程序输入至关重要的任何函数)--每次调用时都必须检查返回值,否则您就不能确信您正在处理实际数据(而不是垃圾数据)在您的代码中。

='ptr'--这是错误的。您的程序存在内存泄漏和其他一些问题。您可以发布完整的代码吗?为什么要使用
malloc
分配内存,然后松开指向它的指针(
group
calendar
)通过使用
calloc
立即分配更多内存?这些都是内存泄漏。
calendar[i].date='ptr';
是一个语法错误,这不是复制整数(或字符串)的方式。你从哪里得到的?它看起来像草稿。在哪里可以看到'ptr',你应该用真实代码替换它。例如calendar[i].date=atoi(ptr);什么是
arrs
?当我试图编译您的代码时,我收到9条警告和1条错误(
arrs
),请提供我们可以编译的您的问题的最小示例。
group = calloc (count, sizeof *group);
calendar = calloc (count, sizeof *calendar);