出于某种原因,当我尝试获取结构的大小时,我总是遇到段错误。
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
类型不完整时,某些编译器可能会发生这种情况,即未定义。在 sizeof
中使用不完整的类型在 C 中是非法的,但某些编译器出于某种原因允许它,将其计算为 0。(尽管我希望编译器在编译时捕获此除以 0。)
你的代码明显是假的,没有说明问题。如果上述理论是正确的,很可能在您的实际代码中,您在 sizeof
中输入了错误的类型 struct my_struct
的名称,或者忘记包含类型的定义 >struct my_struct
.
(极不可能,但无论如何......)
关于c - 结构的大小 - c 中的 size_t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2411798/