这个malloc错误是什么意思?损坏的上衣尺寸?

这个malloc错误是什么意思?损坏的上衣尺寸?,c,C,我正在尝试初始化我创建的两个结构中的一些值。(该程序的目标是模拟虚拟内存)由于某种原因,当我尝试初始化pgTable[I]时,validFlag=1出现以下错误: malloc():损坏的顶部大小 但如果我将其初始化为0,则不会。我以为这会让我离开我的阵型,但我不知道这怎么可能 谁能告诉我我做错了什么 int* memmory = malloc( sizeof( int ) * sizeVM * pageSize ); struct TLBentry* tlb = malloc( siz

我正在尝试初始化我创建的两个结构中的一些值。(该程序的目标是模拟虚拟内存)由于某种原因,当我尝试初始化
pgTable[I]时,validFlag=1
出现以下错误:

malloc():损坏的顶部大小

但如果我将其初始化为0,则不会。我以为这会让我离开我的阵型,但我不知道这怎么可能

谁能告诉我我做错了什么

  int* memmory = malloc( sizeof( int ) * sizeVM * pageSize );
  struct TLBentry* tlb = malloc( sizeof(struct TLBentry) * sizeTLB );
  struct pageTableEntry* pgTable = malloc( sizeof(struct pageTableEntry) * sizeVM );

  for( int i = 0; i < sizeTLB; i++){
    tlb[i].virtualAddress = i;
    tlb[i].physicalAddress = i;
  }

  for( int i = 0; i < sizePM; i++){
    pgTable[i].dirty = 0;
    pgTable[i].validFlag = 1;
    pgTable[i].physicalAddress = i;
  }

  memSys->virtMem = memmory;
  memSys->tlb = tlb;
  memSys->pgTable = pgTable;
int*memmory=malloc(sizeof(int)*sizeVM*pageSize);
struct-TLBentry*tlb=malloc(sizeof(struct-TLBentry)*sizeTLB);
struct pageTableEntry*pgTable=malloc(sizeof(struct pageTableEntry)*sizeVM);
对于(int i=0;ivirtMem=memmory;
memSys->tlb=tlb;
memSys->pgTable=pgTable;

分配
sizeVM
条目时,循环将上升到
sizePM

TLDR:您的代码损坏了内存。完整注释:当您使用诸如
malloc()
free()
等函数以及所有相关函数访问动态内存时,几乎所有收到的错误都是由于先前未定义的行为造成的,这些行为包括溢出缓冲区或多次调用指针上的
free()
,或调用
free()
的值不正确。早期的破坏性调用和/或代码设置了地雷,而您在地雷上踩到的错误。您有某种内存破坏bug,可能与您显示的代码相去甚远。在下运行程序,修复它抱怨的第一个无效内存访问(所有后续抱怨可能只是第一个错误的“后果”),重复,直到不再出现错误。如果您不理解第一次无效内存访问所指的代码可能是错误的,请将该部分代码切割为一个错误;如果您在这个过程中没有发现问题,请提出新问题并向我们提供MCVE。附加提示:如果
valgrind
的第一个投诉似乎是关于C库函数的,例如
strcpy
,这通常意味着错误在调用该函数的代码中
valgrind
的投诉包括堆栈跟踪,因此请使用该跟踪来确定代码中负责的部分。在结构中循环时,请检查循环限制是否与分配大小相同。当然,我们都会犯错误,有时也会出错,但当您实际收到错误消息时,最好三次检查您是否在两个位置使用了相同的限制--这就是如何看到
sizePM
可能与
sizeVM
不同。