[英]size of struct - size_t in c
由于某种原因,当我尝试获取结构的大小时,我总是遇到分段错误。
struct my_struct {
char *a;
int b;
};
int main(int argc, char *argv[])
{
struct my_struct dastruct;
size_t len = sizeof(dastruct) / sizeof(struct my_struct); // error
qsort(dastruct, len, sizeof(struct my_struct), cmp);
...
}
有什么想法我做错了吗? 谢谢
如果您是在
size_t len = sizeof(dastruct) / sizeof(struct my_struct);
可能是由于sizeof(struct my_struct)
评估为0引起的。(即问题实际上是被零除)。 当类型struct my_struct
类型不完整(即未定义)时,在某些编译器中可能会发生这种情况。 在C语言中,在sizeof
使用不完整类型是非法的,但是某些编译器出于某种原因允许使用它,并将其评估为0。(尽管我希望编译器在编译时将其除以0。)
您的代码显然是伪造的,没有说明问题。 如果以上理论是正确的,则很可能在您的真实代码中您在sizeof
错误键入了类型struct my_struct
的名称,或者忘记了包含struct my_struct
类型的定义。
(极不可能,但无论如何...)
您可能要使dastruct
成为数组。
struct my_struct dastruct[10];
编辑:您还没有给cmp
,所以不可能说那里有什么问题(我认为这是发生分段错误的地方)。
我可能唯一看到的是您忘记了#include <stdlib.h>
。 请记住,C在第一次使用时隐式声明了qsort
。
如果发布的代码是完整的代码,那么您将无法初始化dastruct
a
指针成员,因此它指向某个无效位置。 当qsort()
调用可能使用该指针的cmp()
(您没有显示该代码),您很可能会遇到段错误。
请注意,我假设您的段错误发生在除了 len
的初始化之外的某个地方,该初始化仅对两个常量进行len
(无论如何,这很可能在编译时发生)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.