我有一个奇怪的分段错误,std :: length_error,有时我的代码可以工作吗?

如何解决我有一个奇怪的分段错误,std :: length_error,有时我的代码可以工作吗?

我完成了一些代码,打印出一个单词出现了多少次。但是,当我完成并尝试在其他编译器上运行代码时,它不起作用。首先,这是我的代码在我的初始文件中工作的图片:

enter image description here

但是当我使用其他编译器(onlinegdb)时,出现此错误:

enter image description here

最让我困惑的是;当我尝试将文件复制到新的VS Code .cpp文件时,它不起作用。它运行代码,但什么都不打印。当我进入gdb时,我发现此错误:

enter image description here

如果有人知道细分错误/ std :: length_error发生在哪里,请告诉我,如果您有任何建议将非常有用!另外,知道为什么我在同一编译器(VS代码)上得到不同的结果也将很有帮助。这是我的代码:

#include <fstream>
#include <iostream>
#include <string>

using namespace std;

class WordOccurrence 
{
public:
    WordOccurrence(const string& word="",int num=1)
    {
        word_ = word;
        num_ = num;
    }
    bool matchWord(const string & compare)
    {
        if(word_ == compare)
            return true;
        else
            return false;
    }   
    void increment()             
    {
        num_++;
    }   
    string getWord() const      
    {
        return word_;
    }
    int getNum() const          
    {
        return num_;
    }
private:
    string word_;
    int num_;
};

class WordList
{
public:
    friend bool equal(const WordList&,const WordList&);
    WordList();                         
    WordList(const WordList &);         
    ~WordList();                            
    WordList operator= (const WordList &);  
    void addWordFile(WordList w);
    void addWord(const string &);
    void print();
private:
    WordOccurrence *wordArray_;         
    int size_;
};

WordList::WordList() 
{
    size_ = 0;
    wordArray_ = new WordOccurrence [size_];
}

WordList::WordList (const WordList &neww) 
{   
    size_ = neww.size_;
    wordArray_ = new WordOccurrence[size_];

    for (int i = 0; i <= (size_ - 1); i++) 
        wordArray_[i] = neww.wordArray_[i];
}

WordList::~WordList () 
{
    delete [] wordArray_;
}

WordList WordList::operator= (WordList const &overload) 
{
    WordList temp(overload);
    swap(wordArray_,temp.wordArray_);
    swap(size_,temp.size_);
    return *this;
}

void WordList::addWord(const string& word) 
{
    if(size_ == 0)
    {
        WordOccurrence *first_array = new WordOccurrence[1];
        first_array[0] = word;
        delete[] wordArray_;
        wordArray_ = first_array;
        delete[] first_array;
        size_++;
        return;
    }

//if the word is already in the array,we increase the count of it by 1
    for (int i = 0; i < size_; i++) 
    {
        if (wordArray_[i].matchWord(word)) 
        {
            wordArray_[i].increment();
            return;
        }
    }

//if it is not in the array already,we need to increase its size and then add the new word to the wordarray.
    WordOccurrence *new_array = new WordOccurrence[size_+1];
    for (int i = 0; i < size_; i++)
    {
        new_array[i] = wordArray_[i];
    }
    new_array[size_] = WordOccurrence(word); 
    delete[] wordArray_;
    size_++;
    wordArray_ = new_array;
    delete[] new_array;
}
void WordList::print() 
{
//to output to a file because when we get a lot of words it's kinda hard to see on just the terminal
    ofstream myfile ("output.txt");
    WordList sortedList(*this);
    
//Sorting from smallest to largest
    int smallest = wordArray_[0].getNum();

    for (int i = 1; i < size_; i++) 
    {
//stores the smallest value into smallest
        if(wordArray_[i].getNum() < smallest) 
            smallest = wordArray_[i].getNum();
    }
    int location = 0;
//stores values from start to finish in the new list starting at location sortedList[0]
    while(location < size_) 
    {
        for(int i = 0; i < size_; i++) 
        {
//runs through the new list until it finds a value that is apart of the smallest/rarest words
            if(wordArray_[i].getNum() == smallest) 
            {
                sortedList.wordArray_[location] = wordArray_[i];
                location++;
            }
        }
//increases the value of smallest allowing for numbers with greater found values to be sorted
        smallest++;
    }   
//prints out the sorted version of wordarray
    for(int i = 0; i < size_; i++) 
    {
        string word = sortedList.wordArray_[i].getWord();
        int count = sortedList.wordArray_[i].getNum();
        cout << "Word: " << word << "   Amount: " << count << endl;
        //for longer amounts of text,it was hard to see on a editor so I also have it out to a file.
        myfile << "Word: " << word << "   Amount: " << count << endl;
    }
}

int main()
{
    WordList w;
    w.addWord("one");
    w.addWord("one"); 
    w.addWord("two");
    w.addWord("three");
    w.addWord("four");
    w.addWord("four");
    w.addWord("four");
    w.addWord("four");
    w.addWord("five");
    w.addWord("five");
    w.addWord("five");

    cout << "Sorted list" << endl;
    w.print();
}

解决方法

这有问题

    WordOccurrence *first_array = new WordOccurrence[1];
    first_array[0] = word;
    delete[] wordArray_;
    wordArray_ = first_array;
    delete[] first_array;
    size_++;
    return;

您将first_array分配给wordArray_,然后将其删除。这使wordArray_成为无效的指针。只需删除delete[] first_array;。应当删除两次并仅添加一个新线索,以表明出现了问题。

稍后在同一功能中出现相同的错误

WordOccurrence *new_array = new WordOccurrence[size_+1];
for (int i = 0; i < size_; i++)
{
    new_array[i] = wordArray_[i];
}
new_array[size_] = WordOccurrence(word); 
delete[] wordArray_;
size_++;
wordArray_ = new_array;
delete[] new_array;

delete[] new_array;不应该在那里。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-