【问题标题】:C - Assigning values to a structure with malloc isn't workingC - 使用 malloc 为结构分配值不起作用
【发布时间】:2017-10-05 00:11:14
【问题描述】:

我正在尝试使用分配的内存为结构分配值,但我遇到了一些问题!我已经 4 个月开始编程了,如果我犯了一个愚蠢的错误,很抱歉,但是为了更好的变量名称和摆脱所有其他废话,这里重新编写了代码:

typdef struct mystruct {
double a, b;
int c, d;}
mystruct


// allocating an array to store a number of a, b, c and d values
mystruct * pointer = ((mystruct*)malloc((numFileLines * sizeof(mystruct))));

i = 0;
pointer[i].a = 2133;
pointer[i].b = 3424; .. and so on

这是我的问题.. 我不认为这些被存储了。有谁知道为什么不/我如何将这些值打印到控制台作为测试?

i++;
pointer[i].a = 2133;
pointer[i].b = 3424; 

这给了我垃圾:(试图打印第二个值)

printf("%lf", pointer[1].b);

如果有人可以提供帮助,或者如果您需要有关此问题的更多信息,我将每分钟刷新此页面! 谢谢!

【问题讨论】:

  • 不完全是,那个人正试图将一个数组复制到另一个数组。我只是在分配一个值。
  • 将您的sn-ps粘贴到适当的程序框架后,无法重现。请发布显示问题的Minimal, Complete, and Verifiable example。我正在使用printf("%f %f\n", pointer[1].a, pointer[1].b);
  • @P.Kouvarakis 你需要%lf 用于doublescanf 函数系列中,在printf 中的任何一个都可以。注意printf 中没有float 格式说明符,但float 参数被提升为double
  • 如果你的 C 库不支持 C99,%lf in printf 有未定义的行为。

标签: c arrays pointers struct malloc


【解决方案1】:

我想为什么当您尝试打印 pointer[1] 值时会得到垃圾值。
问题是您使用 malloc() 为您的指针分配内存,该指针是一个数组。 malloc() 不保证内存分配是连续的。因此,当 i = 1 时的指针 [i] 不一定需要指向正确的内存位置。

所以我建议使用 calloc() 而不是 malloc()。 calloc() 确保内存连续分配,而不是随机分配。

【讨论】:

    猜你喜欢
    • 2015-11-09
    • 1970-01-01
    • 1970-01-01
    • 2015-06-27
    • 2018-09-21
    • 2014-04-15
    • 2017-05-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多