【发布时间】:2015-08-14 01:58:35
【问题描述】:
如何在 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返回一个structs数组,但是我想返回count(风格问题),通过参数返回数组。
出了什么问题?函数返回后,count有正确的值,tracks仍然为NULL。
【问题讨论】:
-
听起来是一件功课。是否提供了
mem_alloc功能? -
processplaylist意味着随时处理resp,因此如果不够长,您的Track数组需要将其大小加倍。鉴于提供的mem_alloc函数,您到底想知道什么? -
不是作业,已经有一段时间了。 mem_alloc() 是一个计数内存分配函数,不比 malloc() 多多少;内存集();内存计数++;
-
假设
mem_alloc像malloc一样工作,我的代码看起来没问题。你有问题吗? -
从表面上看,您显示的代码应该可以工作。由于您断言它不起作用,因此有空间认为问题出在您未显示的代码中。请创建一个演示问题的 MCVE (How to create a Minimal, Complete, and Verifiable Example?)。它不需要找到实际的播放列表;它只需要放置一些数据并展示您遇到的问题。