出于某种原因,当我试图获得结构的大小时,我一直会遇到分段错误。
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);
...
}
任何想法我做错了什么?感谢
答案 0 :(得分:2)
如果您是专门在
处发生崩溃的话size_t len = sizeof(dastruct) / sizeof(struct my_struct);
行,它可能是由sizeof(struct my_struct)
评估为0引起的。(即问题实际上是除以零)。当类型struct my_struct
不完整时,某些编译器可能会发生这种情况,即未定义。在sizeof
中使用不完整类型在C中是非法的,但是某些编译器出于某种原因允许它,将其评估为0.(虽然我希望编译器在编译时将此除法除以0。)
您的代码显然是假的,并没有说明问题。如果上述理论是正确的,很可能在您的真实代码中,您错误地输入了struct my_struct
中sizeof
类型的名称,或者忘记包含类型struct my_struct
的定义。
(极不可能,但无论如何......)
答案 1 :(得分:1)
你可能想让dastruct
成为一个数组。
struct my_struct dastruct[10];
编辑:你还没有给出cmp
,所以不可能说那里出现了什么问题(我看到会出现分段错误的地方)。
答案 2 :(得分:0)
我唯一能看到的是你忘了#include <stdlib.h>
。请记住,C在第一次使用时会隐式声明qsort
。
答案 3 :(得分:0)
如果您发布的代码是您的完整代码,那么您无法初始化a
的{{1}}指针成员,因此它指向一个无效的位置。当dastruct
调用可能使用该指针的qsort()
时(您没有显示该代码),您可能会遇到段错误。
请注意,我假设你的段错误发生在某个地方除了 cmp()
的初始化之外,它只划分了两个常量(无论如何都可能在编译时发生)。 / p>