gpt4 book ai didi

c - 结构体的动态内存分配

转载 作者:行者123 更新时间:2023-11-30 19:35:19 25 4
gpt4 key购买 nike

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

#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. 你的数组非常小,而且根本不是动态的。如果您无论如何都使用 malloc() 进行分配,为什么不动态分配所有内容呢?
  2. 您不能分配给数组。
  3. num 成员(我认为它是用来存储“字符串”的长度)被分配了一个指针,这显然不是您想要的。而且,只有在非常特殊的情况下才定义该行为,当您将指针分配给整数时,编译器应该警告您,除非您关闭警告。

也许你想要这个,

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

关于c - 结构体的动态内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42821050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com