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谢谢!!!

 

 

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++;
}