如何解决制作动态C结构数组时出错
我有一个名为Collection
的结构:
typedef struct collection {
char *type;
char *arg;
} *Collection;
我想拥有一个该结构的动态数组(或更确切地说,是指向该结构实例的指针)。这是我尝试过的:
Collection *rawCollections = malloc(0);
int colCounter = 0;
while (i < argc) {
Collection col = malloc(sizeof(Collection));
// code to fill in Collection
rawCollections = realloc(rawCollections,sizeof(rawCollections) + sizeof(Collection));
rawCollections[colCounter] = col;
colCounter++;
}
我的理由是,每次需要添加另一个sizeof(Collection)
时,我们都会向该数组中添加realloc(): invalid next size
Aborted (core dumped)
。我收到这些错误,但不知道为什么:
<!-- Uses internet but not required -->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-feature android:required="false" android:name="android.hardware.wifi"/>
解决方法
您必须通过将数组元素的大小(指向colCounter + 1
的指针)乘以元素的新数量(sizeof(Collection)
)来计算数组的新大小。
还要注意将指针隐藏在typedef后面是多么令人困惑:struct collection **rawCollections = NULL; // no need for `malloc(0)`
int colCounter = 0;
while (i < argc) {
struct collection *col = malloc(sizeof(*col));
// code to fill in Collection
rawCollections = realloc(rawCollections,sizeof(*rawCollections) * (colCounter + 1));
rawCollections[colCounter] = col;
colCounter++;
}
不是结构的大小。
这是修改后的版本:
$im = vips_image_new_from_file('./big_image.png',['access' => 'sequential'])["out"];
vips_call('dzsave',$im,'./folder',["overlap" => 0,"tile-size" => 256,"depth" => "one"]);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。