【问题标题】:malloc debugging...solution neededmalloc 调试...需要解决方案
【发布时间】:2015-01-05 20:31:51
【问题描述】:
typedef struct nodes* nods;
        struct nodes
            {
                int field,grammi,stili,flag1,flag_gv,height;
                nods d,r,l,u;
            };

。 . .

int j;

         struct nodes kefelement[30];
        kefelement=(nods)malloc(30*(sizeof(struct nodes)));
            for ((j=0); (j<30); j++)   
               {
                kefelement[j].r=NULL;
                kefelement[j].d=NULL;
                kefelement[j].grammi=j+1;
                kefelement[j].stili=j+1;
                kefelement[j].field=0;
                kefelement[j].u=NULL;
                kefelement[j].l=NULL;
                kefelement[j].flag1=0;
                kefelement[j].flag_gv=0;
                kefelement[j].height=0;

            }

问题出在 malloc....有人请帮助我!!!!

【问题讨论】:

  • 这与malloc无关;您不能分配给数组类型。
  • 绝对是静态和动态数组创建之间的混淆。

标签: c malloc


【解决方案1】:
struct nodes kefelement[30];
kefelement = (nods)malloc(30*(sizeof(struct nodes)));

kefelement 是一个数组。编译器将分配一个可以通过名称kefelement 访问的内存区域。请注意,此名称不是可以分配新值的指针。但是,在表达式中使用 kefelement 会(有一些例外)将名称转换为指向其第一个元素的指针。

如果要为数组分配动态内存,需要声明为指针:

struct nodes *kefelement;
kefelement = (nods)malloc(30*(sizeof(struct nodes)));

或更好:

kefelement = malloc (30 * sizeof *kefelement);

无论指针指向什么,最后一个版本都会自动分配正确的内存量。在 C 中不需要 (nods) 演员表。

【讨论】:

  • 所以实际上只是在没有 malloc 的情况下保持原样(因为我不需要动态数组)我不会在解析这个矩阵到其他例程时遇到问题???因为我的项目是存储一个稀疏数组,所以这些kefelements只是坐标!无论如何谢谢你的帮助,它一直很有启发性!
  • @VasilisLi:是的,应该没问题。
猜你喜欢
  • 2016-03-31
  • 1970-01-01
  • 1970-01-01
  • 2023-01-26
  • 1970-01-01
  • 1970-01-01
  • 2017-10-02
  • 2015-06-04
  • 1970-01-01
相关资源
最近更新 更多