【问题标题】:Memory allocation内存分配
【发布时间】:2011-09-03 20:47:56
【问题描述】:
typedef struct {
    float *numbers;
    float val1;
    float val2;
} Values; 
Values val[16];

如何为结构中的数字分配内存?

【问题讨论】:

  • 可以使用 malloc()。到目前为止,您尝试过做什么?
  • 我们知道可以使用 malloc()。我要求正确使用。
  • 您的 C 教科书对这个主题有什么要说的?您的问题类似于“我该如何做加法”。

标签: c memory-management struct malloc realloc


【解决方案1】:

因此,您可以在不使用动态内存分配的情况下执行此操作:

typedef struct {
    float *numbers;
    float val1;
    float val2;
} Values; 

#define MAX_SIZE 16

int main() {
    Values val[MAX_SIZE];
    float myfloats[MAX_SIZE];
    int i;
    for(i=0;i<MAX_SIZE;i++) {
        val[i].numbers=&myfloats[i];
    }
    return 0;
 }

但是我想不出为什么你想要一个结构只有一个浮点数。

基于名称'numbers',我会说您希望'numbers' 指向floats 的数组,如果是这样,您可以这样做:

#include <malloc.h>

typedef struct {
    float *numbers;
    float val1;
    float val2;
} Values; 

#define MAX_SIZE 16

int main() {
    Values val[MAX_SIZE];
    size_t numberOfFloats = 10;
    int i;

    // for each of the members of the val array
    for(i=0;i<MAX_SIZE;i++) {
        // allocate using calloc (this will set all of the floats to 0.0)
        val[i].numbers=calloc(numberOfFloats,sizeof(float));

        // check the allocation worked...
        if(!val[i].numbers) {
            // insert proper error handling here.
            printf("oops\n");
            return -1;
        }

    }

    // you access the variables like this
    for(i=0;i<MAX_SIZE;i++) {
        int number;
        for(number=0; number < numberOfFloats; number++) {
            printf("Value %d, Number %d = %f\n",i,number,val[i].numbers[number]);
        }
    }

    // don't forget to play nice and clean up afterwards
    for(i=0;i<MAX_SIZE;i++) {
        free(val[i].numbers);
    }
    return 0;
 }

【讨论】:

    【解决方案2】:

    如果你想为结构的第一个元素中的一个浮点数分配空间,你可以这样做:

    #include <stdlib.h>
    
    /* ... */
    
    val[0].numbers = malloc(1 * sizeof(float)); /* "1 * " for clarity... */
    

    如果这就是你的意思。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-13
      • 2012-02-01
      相关资源
      最近更新 更多