gpt4 book ai didi

c - 从函数返回结构体的动态数组

转载 作者:行者123 更新时间:2023-11-30 21:10:06 24 4
gpt4 key购买 nike

如何在 C 函数中动态创建结构体数组?

结构:

typedef struct Track {
char artist[LONGSTR];
char file[LONGSTR];
int id;
int isAlbum;
char name[LONGSTR];
int pos;
char title[LONGSTR];
int time;
} Track;

功能:

int
processplaylist (struct Track** tracks, char* resp)
{
//count the tracks to return
//allocate space for the resulting tracks

*tracks = mem_alloc (count * sizeof (struct Track));

//process each track
return count;
}

以及用法:

char playliststr[] = "file: some-mp3\nTitle: Dire Straits - Romeo And Juliet\nName: TheRadio\nPos: 0\nId: 12\nOK\n"
struct Track* tracks = NULL;
int count = mpd_processplaylist(&tracks, playliststr);

在函数内,轨迹得到了很好的处理,并且直到返回语句轨迹都指向正确的位置以到达轨迹。我见过的大多数问题都是关于数组到值,而不是结构。 This answer返回一个结构体数组,但我想返回计数(样式问题)并通过参数返回数组。

出了什么问题?函数返回后,count 的值正确,tracks 仍为 NULL。

最佳答案

正如那些不太友善的人通过否决该问题所指出的那样,该问题过于宽泛和模糊。我为此道歉,我很绝望。

正如评论中的好人所证实的那样,代码是正确的。尽管调试器显示在 return 语句之前一切正常,但在返回使用之后却不然。

通过注释掉代码行并进行大量记录,有两件事需要注意。在该函数中,您必须将各个轨道引用为 (*tracks + i) 或例如 (*(*tracks + i)).file。事实上,示例代码中没有显示。我尝试过 *(tracks + i)&tracks[i]tracks + i,它们在调试器中似乎都可以工作并且确实不会立即导致错误。我猜代码弄乱了返回后才出现的内存。

在函数外部,在使用中,您将轨道作为数组引用,如 tracks[i] 或例如 tracks[i].file .

我希望至少我的回答有帮助。

关于c - 从函数返回结构体的动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32001181/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com