【问题标题】:calloc struct in CC中的calloc结构
【发布时间】:2011-08-30 09:10:24
【问题描述】:

我正在尝试初始化一个指向其中包含 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,同样的事情会发生。

我该怎么办?

【问题讨论】:

  • 您检查calloc 的返回值以确保它成功了吗?在分配内存和检查内存内容之间是否有任何代码在运行?你有多确定你没有在街区乱涂乱画?
  • 您如何检查ptr 的内容以找到这些奇怪的值?
  • 也许您可以包含 printf 循环的代码,而不是过度使用标点符号。这是calloc man pagecalloc 将分配的内存中的所有位设置为零。您可能一直在使用调试器检查 ptr 中的内容,因此询问您如何知道 ptr 被搞砸了是一个非常有效的问题。
  • 你应该能够给出一个重现问题的简单的最小程序。
  • 您说当您尝试malloc() 时会发生同样的事情。归零项目与非归零项目的比率是否大致相同?您的代码库是否可以有一个宏定义来覆盖 calloc() 隐藏在某处的函数调用?

标签: objective-c c memory struct


【解决方案1】:

您做错了什么...我从未使用过objective-c,因此我将下面的代码粘贴到ideone.com 中,它按预期工作...(打印完成,没有失败,因为)所有值被归零。我的猜测是您没有正确检查,因为您的编译器中不太可能存在错误...

#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;
}

【讨论】:

    猜你喜欢
    • 2011-08-16
    • 2020-03-22
    • 2021-02-01
    • 2020-11-26
    • 1970-01-01
    • 2020-10-08
    • 2021-03-17
    • 1970-01-01
    • 2019-05-17
    相关资源
    最近更新 更多