Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 内核代码中的简单编码错误(可能)_C_Memory Management_Pointers - Fatal编程技术网

C 内核代码中的简单编码错误(可能)

C 内核代码中的简单编码错误(可能),c,memory-management,pointers,C,Memory Management,Pointers,以下是相关结构: typedef struct OS_BM { void *free; /* Pointer to first free memory block */ void *end; /* Pointer to memory block end */ U32 blk_size; /* Memory block size *

以下是相关结构:

typedef struct OS_BM {
  void *free;                     /* Pointer to first free memory block      */
  void *end;                      /* Pointer to memory block end             */
  U32  blk_size;                  /* Memory block size   */ 
  U32  owner_one;                   
} *P_BM;

typedef struct NEW {                           //struct ADDED BY ME
  void *free;
  U8 pid;
} *P_GH;
以下是相关代码(仅“由我添加”的部分):

void*rt\u alloc\u box(void*box\u mem){
/*分配内存块并返回起始地址*/
无效**自由;
#如果!(已定义(uu目标u拱门7_M)|已定义(u目标u拱门7E_M))
国际关系司;
irq_dis=_disable_irq();
免费=((P_BM)box_mem)->免费;
如果(免费){
数组[counter]->free=((P_BM)box_mem)->free;//由我添加-可能不起作用
数组[counter]->pid=rt_tsk_self();//由我添加
计数器+++;//由我添加
((P_BM)box_mem)->free=*free;
}
如果(!irq_dis)\u启用\u irq();
#否则
做{
如果((自由=(无效**)uu ldrex(&((P_BM)box_mem)->自由))==0){
__clrex();
打破
}
}而(u strex((U32)*免费,&((P_BM)box_mem)->免费);
#恩迪夫
返回(免费);
}
int free_owner(void*box_mem,void*box){//我添加的函数
int i;
对于(i=0;ifree;){//可能无法工作
if(rt_tsk_self()==(数组[i]->pid))
返回(0);
}
}
申报表(1);
}
代码描述:第一个功能是内存分配,但我需要为从池中分配的内存块添加保护/所有权。这就是为什么我将内存块地址和进程ID(从
rt\u tsk\u self()
返回)放入我创建的额外全局数组中。第二个函数只是检查使用分配的块的进程是否与创建的进程具有相同的所有权(它再次使用
rt\u tsk\u self()

实际问题:注释为“可能不工作”的行似乎不工作,因为我确信我可以将进程ID放入数组并检查它是否在数组中,但我无法对内存块地址执行同样的操作。这很可能只是一个简单的编码错误,而不是概念错误

 if (box == array[i]->free;){            //MAY NOT BE WORKING
这不应该是:

 if (box == *(array[i]->free)){            //MAY NOT BE WORKING

而且,不知何故,比较void指针让我感到不安。

是不是说
counter++
应该改为在if表达式中使用
counta++
?多余的分号?很抱歉,它应该是所有表达式的计数器。我在原始代码中使用了counta,但我担心它可能会让人困惑。我正在尝试比较box的地址和rt_alloc_box函数中的free变量,如果(box=*(array[I]->free))似乎无法解决问题,因为它们现在是不同的类型
 if (box == *(array[i]->free)){            //MAY NOT BE WORKING