gpt4 book ai didi

c - 在 C90 中将 malloc 用于双指针

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

我正在尝试创建一个结构数组,但一开始我不知道它的大小。

struct MyStruct** thing;
size_t thing_len = 0;
thing = (struct MyStruct**) malloc(thing_len * sizeof(struct MyStruct*));
//...
thing_len += 1
thing = (struct MyStruct**) realloc(thing_len * sizeof(struct MyStruct*));

当我这样做时,thing 获取类型 MyStruct* 而不是 MyStruct** 并且包含 0x0。但是当我这样做的时候

struct MyStruct* thing;
size_t thing_len = 0;
thing = malloc(thing_len * sizeof(struct MyStruct));
//...
thing_len += 1
thing = realloc(thing_len * sizeof(struct MyStruct));

有效!!

我不知道它是否改变了什么,但我正在使用 -ansi-pedantic 选项。

最佳答案

在你的代码中

  realloc(thing_len * sizeof(struct MyStruct*));

是对该函数的错误调用。您必须使用格式 [检查 man page .]

 realloc(<old pointer>, new size);

也就是说,像这样的格式

 oldPointer = realloc (oldPointer, newSize);

是一段非常危险的代码。万一 realloc() 失败,您最终也会丢失原始指针!!

使用realloc()的规定方法是

 tempPointer = realloc (oldPointer, newSize);  //store the return
if (tempPointer) // is it success?
{
oldPointer = tempPointer; // cool, put it back to the variable you want
}
//--> here, whether or not realloc is success, you still got a _valid_ pointer.

关于c - 在 C90 中将 malloc 用于双指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46969881/

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