C 中的 calloc 结构体

发布于 2024-11-09 06:42:47 字数 354 浏览 0 评论 0原文

我正在尝试初始化一个指向其中包含 0.0 值的结构的指针。看下面的情况:

typedef struct 
{
    float a;
    float b;
    float c;
} structA;

structA *ptr = calloc(100000, sizeof(structA));

我希望 *ptr 中的所有值都是 structA,初始值为 {0.0, 0.0, 0.0},但我现在没有。 *ptr 的许多索引显示正确,但某些索引显示奇怪的值(例如 {0.0, 0.0, 10241256124.0})。

如果我尝试 malloc,也会发生同样的事情。

我应该怎么办?

I'm trying to initialize a pointer to a struct with 0.0 values in there. Look at the following situation:

typedef struct 
{
    float a;
    float b;
    float c;
} structA;

structA *ptr = calloc(100000, sizeof(structA));

I want all the values in *ptr be structA with initial values of {0.0, 0.0, 0.0}, but this is not I have now. Many of the indices of *ptr appear correctly, but some indices appear with weird values (like {0.0, 0.0, 10241256124.0}).

If I try malloc, the same thing happens.

What should I do?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

过潦 2024-11-16 06:42:47

你做错了什么......我从来没有使用过 Objective-C,所以我将下面的代码粘贴到 ideone.com< /a> 并且它按预期工作...(打印完成,而不是失败,因为)所有值都为零。我的猜测是你没有正确检查,因为你的编译器中不太可能有错误......

#include <malloc.h>

typedef struct 
{
    float a;
        float b;
        float c;
} structA;



int main() {
    int count = 100000;
    int i;
    structA *ptr = calloc(count, sizeof(structA));
    if(ptr) {
        for(i=0;i<count;i++) {
            if(ptr[i].a || ptr[i].b || ptr[i].c) {
                printf("fail\n");
            }
        }
        printf("done\n");
    }
    return 0;
}

You're doing something wrong... I've never used objective-c, so I stuck the code below into ideone.com and it worked as expected... (printing out done, not failed because) all values were zero'd. My guess is you're not checking properly, since it's quite unlikely there's a bug in your compiler...

#include <malloc.h>

typedef struct 
{
    float a;
        float b;
        float c;
} structA;



int main() {
    int count = 100000;
    int i;
    structA *ptr = calloc(count, sizeof(structA));
    if(ptr) {
        for(i=0;i<count;i++) {
            if(ptr[i].a || ptr[i].b || ptr[i].c) {
                printf("fail\n");
            }
        }
        printf("done\n");
    }
    return 0;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文