2011-04-26 5 views
1

벡터와 맵을 사용하는 프로그램을 작성했습니다.
실행할 때 다음과 같은 오류 메시지가 나타납니다.
lru : malloc.c : 3552 : munmap_chunk : 'ret == 0'어설 션이 실패했습니다. 중단munmap_chunk : 'ret == 0'어설 션이 실패했습니다.

이 오류 메시지의 의미는 무엇입니까?

P.
valgrind를 사용하여 프로그램을 실행하면 'abort'없이 통과합니다. 여기

내 코드입니다 : 내가 볼

#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); 
} 
+0

코드를 알려주십시오. –

답변

4

하나 이상의 오류 : j는 0 인 경우

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

, 이것은 결과 목록의 시작하기 전에 요소를 삭제하려고합니다 추락.

관련 문제