Drop_the_Course
2021-06-18 22:14
采纳率: 33.3%
浏览 160

C++的,munmap_chunk(): invalid pointer的问题!

各位哥哥姐姐们救救我吧,我不知道是哪错了QAQ

这是struct:

struct int_list {
    int* data;      // pointer to the underlying array
    int  size;      // # of elements from user's perspective
    int  capacity;  // length of underlying array
};

这是makenew:

int_list make_new(int cap = 5)
{
    int_list newlist;
    if(cap <= 0)
        cmpt::error("Capacity should be more than 0. ");
    newlist.size = 0;
    newlist.capacity = cap;
    newlist.data = new int[cap];
    
    return newlist;
}

(前两个是不能改的)

这是append:

void append_right(int_list& arr, int n)
{    
    if (arr.size >= arr.capacity) {
        arr.capacity = 2 * arr.capacity;         
        int* new_arr = new int[arr.capacity]; 
        for(int i = 0; i < arr.size; ++i) {  
            new_arr[i] = arr.data[i];          
        }
        delete[] arr.data; 
        for(int i = 0; i < arr.size; i++)
            arr.data[i] = new_arr[i];                                    
    }
    assert(arr.size < arr.capacity);
    arr.data[arr.size] = n;
    arr.size++;
}

这是读取txt:

int_list make_fromFile(const string& fname)
{
    int_list test = make_new();
    test.size = 0;
    ifstream fin;
    fin.open(fname);
    int integer;
    while(!fin.eof())
    {
        fin >> integer;
        append_right(test,integer);
    }
    fin.close();
    return test;
}

test是这样:

void make_fromFile_test()
{
    cout << "Running make_fromFile_test()... ";
    
    int_list arr = make_fromFile("test_small.txt");    
    writeln(arr);
    cout << arr.size;
    
    cout << "\nmake_fromFile_test() passed.\n"; 
}

顺便那个txt里面就两行数:

4 -2 0
8000 64 64 -125

然后我一run那个test,就会报错

munmap_chunk(): invalid pointer
Aborted (core dumped)

请问谁知道是为什么呀QAQQQ谢谢!!!

 

 

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • qfl_sdu 2021-06-18 23:03
    已采纳

    void append_right(int_list& arr, int n)函数修改如下:

    void append_right(int_list& arr, int n)
    {    
    	if (arr.size >= arr.capacity) {
    		arr.capacity = 2 * arr.capacity;         
    		int* new_arr = new int[arr.capacity]; 
    		for(int i = 0; i < arr.size; ++i) {  
    			new_arr[i] = arr.data[i];          
    		}
    		delete[] arr.data;
    		arr.data = new_arr;  //添加上这两句,把下面的for注释掉就可以了
    		new_arr = 0;
    		/*
    		for(int i = 0; i < arr.size; i++)
    			arr.data[i] = new_arr[i]; 
    			*/
    	}
    	assert(arr.size < arr.capacity);
    	arr.data[arr.size] = n;
    	arr.size++;
    }
    1 打赏 评论

相关推荐 更多相似问题