C 从函数返回结构的动态数组

C 从函数返回结构的动态数组,c,pointers,struct,C,Pointers,Struct,如何在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**

如何在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);
在函数中,轨迹被很好地处理,直到return语句tracks指向正确的位置才能到达轨迹。我看到的大多数问题都是关于数组到值,而不是结构。 返回一个结构数组,但我想返回样式的计数问题,并通过参数返回数组


出什么事了?函数返回后,count具有正确的值,并且tracks仍然为NULL。

正如不太好的人通过向下投票指出的那样,这个问题过于宽泛和模糊。我为此道歉,我当时很绝望

正如评论中的好人所确认的,代码是正确的。即使调试器显示在return语句之前一切正常,而在返回到用法之后一切都不正常

通过注释代码行和大量日志记录,有两件事需要注意。 在函数中,您必须将各个曲目称为*tracks+i或,例如,**tracks+i.file。事实上,示例代码中没有显示。我尝试了*tracks+I、&tracks[I]和tracks+I,它们在调试器中似乎都能工作,并且不会立即导致错误。我猜代码弄乱了只有在返回后才出现的内存

在函数外部,在用法中,您将这些磁道称为数组、磁道[i]或(例如)磁道[i].file


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

听起来像是一份家庭作业。是否提供mem_alloc功能?processplaylist意味着在移动中处理resp,因此如果不够长,您的曲目阵列需要加倍大小。考虑到提供的mem_alloc函数,您到底想知道什么?不是家庭作业,已经有一段时间了。mem_alloc是一个计数内存分配函数,不比malloc多多少;记忆集;memcount++;假设mem_alloc像malloc一样工作,那么我认为您的代码看起来还可以。你有什么问题吗?表面上看,你展示的代码应该是有效的。因为您断言它不起作用,所以有空间认为问题出在您没有显示的代码中。请创建一个演示问题的MCVE。它不需要找到实际的播放列表;它只需要将一些数据放在适当的位置,并演示您看到的问题。您确定*tracks+i.file吗?如果轨道是结构轨道**,您将尝试应用。在结构轨迹上*。无论如何,这看起来像是指向数组的指针的运算符优先级问题,在数组中需要写入*arr[i],而不是*arr[i]。@Quentin感谢您指出这一点。虽然调试表明它是正确的,但实际上它不是。