struct的大小 - c中的size_t

时间:2010-03-09 19:10:02

标签: c struct sizeof

出于某种原因,当我试图获得结构的大小时,我一直会遇到分段错误。

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);
    ...
}

任何想法我做错了什么?感谢

4 个答案:

答案 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_structsizeof类型的名称,或者忘记包含类型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>