动态内存分配结构

时间:2017-03-15 21:30:26

标签: c dynamic-memory-allocation

我需要编写一个程序,其中包含两个字段的结构:整数和字符串。接下来我需要编写一个动态分配这个结构的函数,并将int和string作为参数传递给分配的结构。此函数还将返回指向新建结构的指针。该程序的第二个元素应该是将struct指针作为参数的函数,然后在屏幕上打印所有文件,然后释放struct的内存。这是我能想到的最好的。

#include <stdio.h>
#include <stdlib.h>

struct str{
   int num;
   char text[20];
};

struct str* return_address(int *num, char *text){
  struct str* new_struct=malloc(sizeof(struct str));
  new_struct->num=num;
  new_struct->text[20]=text;
  return new_struct;
};

void release(struct str* s_pointer){
  printf("%d %s", s_pointer->num, s_pointer->text);
  free(s_pointer);
};



int main()
{
  struct str* variable=return_address(1234, "sample text");
  release(variable);

  return 0;
}

1 个答案:

答案 0 :(得分:0)

  1. 你的阵列非常小,也不是动态的。如果你正在使用malloc()进行分配,为什么不动态分配所有内容?
  2. 您无法分配数组。
  3. 我认为num成员用于存储“字符串”的长度,正被分配一个指针,这不是你想要的。而且,只有在指定整数的指针时才会在非常特殊的情况下定义行为,除非您关闭警告,否则编译器应该警告您。
  4. 也许你想要这个,

    struct string {
        char *data;
        int length;
    };
    
    struct string *
    allocate_string(int length, const char *const source)
    {
        struct string *string;
        string = malloc(sizeof *string);
        if (string == NULL)
            return NULL;
        string->length = strlen(source);
        // Make an internal copy of the original
        // input string
        string->data = malloc(string->length + 1);
        if (string->data == NULL) {
            free(string);
            return NULL;
        }
        // Finally copy the data
        memcpy(string->data, source, string->length + 1);
        return string;
    }
    
    void
    free_string(struct string *string)
    {
        if (string == NULL)
            return;
        free(string->data);
        free(string);
    }