C 结构的动态内存分配
我需要写一个程序,其中包含两个字段:整数和字符串。接下来,我需要编写一个函数来动态分配这个结构,并将int和string作为参数传递给分配的结构。此函数还将返回指向新构造的指针。这个程序的第二个元素应该是函数,它以struct指针为参数,然后在屏幕上打印所有文件,然后释放struct的内存。这是我能想到的最好的了C 结构的动态内存分配,c,dynamic-memory-allocation,C,Dynamic Memory Allocation,我需要写一个程序,其中包含两个字段:整数和字符串。接下来,我需要编写一个函数来动态分配这个结构,并将int和string作为参数传递给分配的结构。此函数还将返回指向新构造的指针。这个程序的第二个元素应该是函数,它以struct指针为参数,然后在屏幕上打印所有文件,然后释放struct的内存。这是我能想到的最好的了 #include <stdio.h> #include <stdlib.h> struct str{ int num; char text[20]
#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;
}
#包括
#包括
结构str{
int-num;
字符文本[20];
};
结构str*返回地址(int*num,char*text){
struct str*new_struct=malloc(sizeof(struct str));
新建结构->num=num;
新建结构->文本[20]=文本;
返回新结构;
};
无效释放(结构str*s_指针){
printf(“%d%s”,s\u指针->数值,s\u指针->文本);
自由(s_指针);
};
int main()
{
struct str*变量=返回地址(1234,“示例文本”);
释放(变量);
返回0;
}
malloc()
进行分配,为什么不动态分配所有内容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);
}
问题是什么?我不能让这个程序工作。即使编译后它崩溃了。我猜,
new\u struct->text[20]=text代码>不是你想要的几个问题。这里有两个。在return_address函数中,需要的是'int num',而不是'int*num'。另外,请看一行代码:“new_struct->text[20]=text;”。应该是strncpy(new_struct.text,text,sizeof(new_struct.text));您可能需要将new_struct->text的最后一个字节设置为“\0”,以确保它以null结尾,否则,如果原始字符串为20个字符或更多,printf可能会爆炸。警告不是为了好玩。启用并注意它们!只有在你把它们修好后才可以问!(如果您不了解现有问答,请搜索它们)。并始终检查malloc
和其他可能报告严重错误的函数的结果。