我正在尝试创建一个struct的数组,但我不知道它的大小。
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
选项。
答案 0 :(得分:4)
在您的代码中
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.