繁体   English   中英

结构的大小-C中的size_t

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM