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

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

报告相同问题?

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效