鱼翔浅底666 2022-12-01 11:45 采纳率: 0%
浏览 8
已结题

C++运行时报错Stack Overflow求解

问题遇到的现象和发生背景

我想要自己实现一个vector头文件。代码如下:

#ifndef _MY_VECTOR_H
#define _MY_VECTOR_H
template<class T>
class my_vector
{
public:
    my_vector(int size)
    {
        this->data = (T*)malloc(sizeof(T) * size);
        this->_size = size;
        for (int i = 0; i < size; i++)
        {
            *(data + i) = NULL;
        }
    }
    my_vector()
    {
        this->data = (T*)malloc(sizeof(T) * 10);
        this->_size = 10;
    }
    ~my_vector()
    {
        free(this->data);
    }
    void push_back(T data)
    {
        for (int i = 0; i < this->_size; i++)
        {
            if (!(*(this->data + i)))
            {
                (*(this->data + i)) = data;
                return;
            }
        }
        re_malloc(this->_size+5);
        push_back(data);
    }
    T* get_values()
    {
        return this->data;
    }
private:
    int _size;
    T* data;
    void re_malloc(int size)
    {
        int old_size = this->_size;
        T* old_point = this->data;
        this->data = (T*)malloc(sizeof(T) * size);
        this->_size = size;
        // 给新空间标NULL
        for (int i = this->_size; i < this->_size; i++)
        {
            *(this->data + i) = NULL;
        }
        //复制
        for (int i = 0; i < old_size; i++)
        {
            *(this->data + i) = *(old_point + i);
        }
        free(old_point);
    }
};
#endif 
主程序:

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include "my_vector.h"
using namespace std;
int main()
{
    my_vector<int> vector(2);
    vector.push_back(12321);
    vector.push_back(1232124324);
    vector.push_back(12341321);
    int* data = vector.get_values();
    cout << *data << endl;
    cout << *(data + 2) << endl;
}

运行结果及报错内容

报错stack overflow。
位置在re_malloc()函数中。

我想要达到的结果

正常跑而且内存安全,求解!
希望大家指点我哪里错了!

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 已结题 (查看结题原因) 12月1日
    • 创建了问题 12月1日

    悬赏问题

    • ¥115 关于#python#的问题:未加密前两个软件都可以打开,加密后只有A软件可打开,B软件可以打开但读取不了数据
    • ¥15 在matlab中Application Compiler后的软件无法打开
    • ¥15 想问一下STM32创建工程模板时遇到得问题
    • ¥15 Fiddler抓包443
    • ¥20 Qt Quick Android 项目报错及显示问题
    • ¥15 而且都没有 OpenCVConfig.cmake文件我是不是需要安装opencv,如何解决?
    • ¥15 oracleBIEE analytics
    • ¥15 H.264选择性加密例程
    • ¥50 windows的SFTP服务器如何能批量同步用户信息?
    • ¥15 centos7.9升级python3.0的问题