Malloc和Struct
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Malloc和Struct相关的知识,希望对你有一定的参考价值。
我正面临着malloc和结构的一些困难。我想读取我的代码中显示的m_data.number_chars(这是一个整数)作为我想要分配的内存..但是当我编译我的代码并运行它时,它会粉碎..任何想法......?提前致谢!
#include <stdio.h>
struct movies {
int number_chars;
char name;
int made_year;
float money;
};
struct movies m_data;
int main()
{
scanf("%d",&m_data.number_chars);
m_data.name=malloc(m_data.number_chars);
gets(m_data.name);
printf("%s",m_data.name);
}
那么你应该将char*
传递给scanf
- 更具体地说是存储输入的变量的地址。你没有这样做。
没有返回值检查标准函数,当然你之前没有使用qazxsw poi。
malloc
调用#include <stdio.h>
#include <stdlib.h>
struct movies {
int number_chars;
char* name;
int made_year;
float money;
};
struct movies m_data;
int main(void)
{
if( scanf("%d",&m_data.number_chars)!= 1){
fprintf(stderr, "%s
", "Error in input");
exit(EXIT_FAILURE);
}
getchar();
if(m_data.number_chars <= 0){
fprintf(stderr, "%s
", "Error in number of character count");
exit(EXIT_FAILURE);
}
m_data.name = malloc(m_data.number_chars+1);
if(!m_data.name){
perror("Malloc error");
exit(EXIT_FAILURE);
}
if(fgets(m_data.name,m_data.number_chars+1,stdin)){
printf("[%s]
",m_data.name);
}
return 0;
}
时,需要传递变量的地址来保存结果(使用&符号scanf
)。这肯定会导致严重的内存问题。
此外,&
是name
类型。 char
不是指针。因此,您无法将char
的结果分配给malloc()
。
你需要一个指针类型。
此外,“粉碎”并不是对出了什么问题的技术描述。如果你能更好地表达自己的情况,你可能会更进一步。
尝试:
name
以上是关于Malloc和Struct的主要内容,如果未能解决你的问题,请参考以下文章
内存管理概述内存分配与释放地址映射机制(mm_struct, vm_area_struct)malloc/free 的实现