【发布时间】:2021-05-06 17:09:42
【问题描述】:
这是我创建的一个函数,用于将结构的内容打印为单个字符串,基本上它就像一个 tostring 函数。
typedef struct {
char* firstname;
char* lastname;
char* address;
} info;
char* strucstring(struct* info)
{
char * string = (char*)malloc(sizeof(info->firstname));
sprintf(string, "%s",info->firstname);
return string;
}
当我这样称呼它时,在我的main 中:
char *string = strucstring(info);
printf("%s",string);
free(string);
return 0;
没有内存泄漏,但有一些内存错误。 可以看到没有内存泄漏,但在 8 个上下文中出现了 24 个错误。
如何消除这些错误??
【问题讨论】:
-
sizeof(info)是错误的。你的代码也是错误的,它甚至不能编译;大概你的意思是struct something *info。在任何情况下,您可能是指sizeof info->name,它可以修复它 取决于字符串的声明。最后,既然您似乎在 Unix 系统上,那么请使用char *string = strdup(info->name)而不是 malloc/sprintf -
什么是
info?它的定义不包括在内。不管它是什么,表达式sizeof(info)将提供指针的大小,可能不是您想要的。提示,将原型更改为 char* strucstring(struct* info, size_t size), and pass the _sizeof_info` 作为参数。 -
我进行了编辑。 info 中有很多东西,这就是我使用 malloc(info).. 的原因
-
如何为所有结构内容(如名字、姓氏和地址)分配一个字符串?我要重新分配吗?
-
@klutt 那么
lastname和address??
标签: c memory memory-leaks malloc valgrind