C++ 从函数返回指向结构的指针

C++ 从函数返回指向结构的指针,c++,C++,我试图从函数返回指向我的结构的指针: dbentry* FileReader::parseTrack(int32_t size, char *buffer) { dbentry* track; int cursor = 0; //parse relevant parts track.title = this->getFieldForMarker(cursor, size, "tsng" , buffer); return track; } 设置标题显然不起作用,但我不

我试图从函数返回指向我的结构的指针:

dbentry* FileReader::parseTrack(int32_t size, char *buffer) {
  dbentry* track;
  int cursor = 0;
  //parse relevant parts
  track.title = this->getFieldForMarker(cursor, size, "tsng" , buffer);
  return track;
}

设置标题显然不起作用,但我不知道该怎么做,也不知道该如何从指针读取值,我尝试了一些转换,但似乎没有任何效果,我发现大部分内容我都不知道如何应用,或者是针对C。

您没有分配结构内存,因此您访问并没有返回内存地址。你需要这样的东西:

dbentry* FileReader::parseTrack(int32_t size, char *buffer)
{
    dbentry* track = new dbentry;
    int cursor = 0;
    //parse relevant parts
    track->title = this->getFieldForMarker(cursor, size, "tsng" , buffer);
    return track;
}
dbentry* test = something->parseTrack(size, buffer);
std::cout << test->title;
delete test;
请注意,您必须返回结构指针,因此您不希望在其返回中取消对指针的引用,所以只需使用return track;而不是返回*track

原因是轨迹已经是指针了。您将返回原始解决方案中指针的指针

因此,您可以使用如下函数:

dbentry* FileReader::parseTrack(int32_t size, char *buffer)
{
    dbentry* track = new dbentry;
    int cursor = 0;
    //parse relevant parts
    track->title = this->getFieldForMarker(cursor, size, "tsng" , buffer);
    return track;
}
dbentry* test = something->parseTrack(size, buffer);
std::cout << test->title;
delete test;

您没有分配结构内存,因此访问并没有返回内存地址。你需要这样的东西:

dbentry* FileReader::parseTrack(int32_t size, char *buffer)
{
    dbentry* track = new dbentry;
    int cursor = 0;
    //parse relevant parts
    track->title = this->getFieldForMarker(cursor, size, "tsng" , buffer);
    return track;
}
dbentry* test = something->parseTrack(size, buffer);
std::cout << test->title;
delete test;
请注意,您必须返回结构指针,因此您不希望在其返回中取消对指针的引用,所以只需使用return track;而不是返回*track

原因是轨迹已经是指针了。您将返回原始解决方案中指针的指针

因此,您可以使用如下函数:

dbentry* FileReader::parseTrack(int32_t size, char *buffer)
{
    dbentry* track = new dbentry;
    int cursor = 0;
    //parse relevant parts
    track->title = this->getFieldForMarker(cursor, size, "tsng" , buffer);
    return track;
}
dbentry* test = something->parseTrack(size, buffer);
std::cout << test->title;
delete test;

dbentry*track=新的dbentry。。。;返回轨道;希望*是个打字错误。你不工作是什么意思?getFieldForMarker函数做什么?如何使用dbentry*track?它尚未被分配,并指向某个随机内存位置。显然,我发布的速度太慢了,如果你真的想要一个结构,它会被声明为struct dbentry*varName=struct dbentry*mallocsizeofdbentrydbentry*track=new dbentry。。。;返回轨道;希望*是个打字错误。你不工作是什么意思?getFieldForMarker函数做什么?如何使用dbentry*track?它尚未被分配,并指向某个随机内存位置。显然,我发布的速度太慢了,如果你真的想要一个结构,它将被声明为struct dbentry*varName=struct dbentry*mallocsizeofdbentry当然,你必须做一个delete测试;在cout语句之后,避免内存泄漏。或者更好的是,使用一个独特的ptr,或者甚至可能返回结构本身。是的,这很好用!谢谢,对不起,我是新来的。有些是语法,但我明白你说的内存分配是什么意思。出于好奇,我该如何为一个结构编写解构器?它就像一门课吗?@j_mcnally是的,它是一样的。构造函数也是如此。@j_mcnally:当然,你还需要做一个删除测试;在cout语句之后,避免内存泄漏。或者更好的是,使用一个独特的ptr,或者甚至可能返回结构本身。是的,这很好用!谢谢,对不起,我是新来的。有些是语法,但我明白你说的内存分配是什么意思。出于好奇,我该如何为一个结构编写解构器?它就像一门课吗?@j_mcnally是的,它是一样的。构造器也是如此。@j_mcnally:也看看