gpt4 book ai didi

c++ - munmap_chunk : Assertion `ret == 0' failed

转载 作者:行者123 更新时间:2023-11-30 02:09:04 25 4
gpt4 key购买 nike

我编写了一个使用 vector 和 map 的程序。
当我运行它时,我收到以下错误消息:
lru: malloc.c:3552: munmap_chunk: 断言 `ret == 0' 失败。中止

这个错误信息是什么意思?

附言
当我用 valgrind 运行我的程序时 - 它通过了,没有“中止”。

这是我的代码:

#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <vector>
#include <map>
#include "byutr.h"

using namespace std;

///////////////////////////////////////////
/* DEFINE ZONE */
///////////////////////////////////////////
#define NUM_OF_ARGS 4
#define NUM_OF_DIFF_PAGES 100000

///////////////////////////////////////////
/* GLOBAL VARIABLES */
///////////////////////////////////////////

p2AddrTr tr;//a pre-defined struct
vector<uint32_t> stack;
vector<int> depths;
map<uint32_t, int> pages;
map<uint32_t, int>::iterator it;

int main(int argc, char **argv)
{
stack.reserve(NUM_OF_DIFF_PAGES);

FILE *ifp;//TODO remove!
// unsigned long i;//TODO int OR unsigned long??
int i;
unsigned long pCnt =0;

if(argc != NUM_OF_ARGS)
{
fprintf(stderr,"usage: lru <pageSize> <startAt> <numAccesses>\n");
exit(1);
}

int pageSize = atoi(argv[1]);
int startAt = atoi(argv[2]);
int numAccesses = atoi(argv[3]);

int k;
//Skip some entries if needed
for(k=0;k< startAt;k++){
fread(&tr, sizeof(p2AddrTr), 1, stdin);
}

//size_t bytes = fread(&tr, sizeof(p2AddrTr),1, stdin);
//fread(&tr, sizeof(p2AddrTr),1, stdin); TODO here??

i = 0;

while((!feof(stdin)) && (i<numAccesses)){

fread(&tr, sizeof(p2AddrTr),1, stdin);

//prints the address of the memory access
printf("%08lx ", tr.addr);
cout<<endl;
int currAddr = (tr.addr)/pageSize;

if(pages.find(currAddr) == pages.end()){//New page
pCnt++;

//insert the new page to the map
pages.insert(pair<uint32_t, int>(currAddr,pCnt));

//insert the new page to the 'stack'

stack.push_back(currAddr);

}
else{//page already exists

size_t j;
//find the page in the stack
for(j=0;j<stack.size();j++){
if(stack[j] == currAddr){
cout << "passed stack[j]"<<endl;
depths.push_back(stack.size() - j);
break;
}
}
//move the page to the top of the stack
stack.erase(stack.begin() + (j-1));
stack.push_back(currAddr);
}

i++;
}

return (0);
}

最佳答案

我看到至少一个错误:

stack.erase(stack.begin() + (j-1));

如果 j 为 0,这将尝试删除列表开头之前的元素,从而导致崩溃。

关于c++ - munmap_chunk : Assertion `ret == 0' failed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5792637/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com