在C中的结构的malloc(从C 移植)



我想在堆上保留一些内存空间,并用指针访问它。

代码在C 中运行良好,但我无法在C。

中编译它。
#include <string.h>
#include <stdlib.h>
#define IMG_WIDTH 320
struct cluster_s
{
  uint16_t size;
  uint16_t xMin;
  uint16_t xMax;
  uint16_t yMin;
  uint16_t yMax;
};
static struct cluster_s* detectPills(const uint16_t newPixel[])
{
  static struct cluster_s **pixel = NULL;
  static struct cluster_s *cluster = NULL;
  if(!pixel){
    pixel = (cluster_s**) malloc(IMG_WIDTH * sizeof(struct cluster_s*));
    if(pixel == NULL){
      return NULL;
    }
  }
  if(!cluster){
    cluster = (cluster*) malloc((IMG_WIDTH+1) * sizeof(struct cluster_s));
    if(cluster == NULL){
      return NULL;
    }
    for(int i=0; i<IMG_WIDTH;i++){
      memset(&cluster[i], 0, sizeof(cluster[i]));
      pixel[i] = &cluster[i];
    }
  }
(...)
}

给我以下汇编错误:

错误:'cluster_s'undeclared(此功能首次使用( pixel =(cluster_s **(malloc(img_width *sizeof(struct *cluster_s((;

如果我评论两个Malloc的电话,我可以对其进行编译。我还试图在malloc之前删除演员阵容,并遇到了汇编错误:

在功能中 _sbrk_r': sbrkr.c:(.text._sbrk_r+0xc): undefined reference to _sbrk'Collect2:错误:LD返回1退出状态

编辑:提出的答案是正确的,问题来自链接器,该链接器找不到SBRK

这个

我还试图在malloc之前删除演员并进行汇编 错误:

和这个

代码在C 中运行良好,但我无法在C。

中编译它。

彼此矛盾。

第一个意味着您试图将程序编译为C 程序。

将程序编译为C 程序,作为C程序,有两种方法。

第一个在程序中无处不在使用类型规范符struct cluster_s而不是cluster_s。例如

pixel = (struct cluster_s**) malloc(IMG_WIDTH * sizeof(struct cluster_s*));
         ^^^^^^^^^^^^^^^^  
//...
cluster = (struct cluster*) malloc((IMG_WIDTH+1) * sizeof(struct cluster_s));
           ^^^^^^^^^^^^^^

第二个是引入类型指定符struct cluster_s的别名

typedef struct cluster_s cluster_s;

替换

struct cluster_s
{
   ...
};

typedef struct cluster_s 
{
    ....
}cluster_s;

在C 中,一个结构和类是类似的,可以在大多数情况下互换使用。因此cluster_sstruct cluster_s都可以使用。

在C中,未定义cluster_s。上面的更改将定义相同名称的类型。

您可以在C 中使用类与结构的何时可以看到答案?对于类和结构之间的差异。

相关内容

  • 没有找到相关文章

最新更新