gpt4 book ai didi

c - 基本问题 : C function to return pointer to malloc'ed struct

转载 作者:太空宇宙 更新时间:2023-11-04 00:55:11 26 4
gpt4 key购买 nike

关于 C 结构和指针...

昨天我写了下面的代码(尝试从我的内存中记住它的一部分):

    typedef struct {
unsigned short int iFrames;
unsigned short int* iTime; // array with elements [0..x] holding the timing for each frame
} Tile;

Tile* loadTile(char* sFile)
{
// expecting to declare enough space for one complete Tile structure, of which the base memory address is stored in the tmpResult pointer
Tile* tmpResult = malloc(sizeof(Tile));

// do things that set values to the Tile entity
// ...

// return the pointer for further use
return tmpResult;
}

void main()
{
// define a tile pointer and set its value to the returned pointer (this should also be allowed in one row)
// Expected to receive the VALUE of the pointer - i.e. the base memory address at where malloc made space available
Tile* tmpTile;
tmpTile = loadTile("tile1.dat");

// get/set elements of the tile
// ...

// free the tile
free(tmpTile);
}

我看到的:我可以在函数内部使用 malloced Tile 结构,但是一旦我尝试在 Main 中访问它,我从 Visual Studio 中收到关于堆的错误(它告诉我在调用之后释放了一些东西返回)。

如果我更改它以便在 Main 中 malloc 空间,并将指向该空间的指针作为参数传递给 loadTile 函数(以便该函数不再返回任何内容)那么它确实可以工作,但我相信我还应该能够让 loadTile 函数分配空间并返回指向该空间的指针吗?!

谢谢!!

最佳答案

您尝试执行的操作没有任何问题,或者至少此处的代码没有问题。但是,我担心这一行:

unsigned short int* iTime; // array with elements [0..x] holding the timing for each frame

这不是真的,除非你在某处分配 iTime:

Tile* tmpResult = malloc(sizeof(Tile));
tmpResult->iTime = malloc(sizeof(short) * n);

清理时需要释放它:

free(tmpTile->iTime);
free(tmpTile);

关于c - 基本问题 : C function to return pointer to malloc'ed struct,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5327012/

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