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的主要内容,如果未能解决你的问题,请参考以下文章

与struct和malloc共享内存fork

内存管理概述内存分配与释放地址映射机制(mm_struct, vm_area_struct)malloc/free 的实现

C Struct typdef malloc 赋值

malloc struct vs. 的“成员”当结构非常简单时,整个结构

new与malloc的区别struct与class的区别

new与malloc的区别struct与class的区别