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

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++;
    }
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog