首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >我的删除有误吗?

我的删除有误吗?
EN

Stack Overflow用户
提问于 2018-01-26 04:29:19
回答 1查看 55关注 0票数 0

所以在课堂上,我们必须创建一个代码,它从文件中获取单词,忽略标点符号,并打印出单词。不仅如此,它还必须忽略相同单词的副本,而且要跟踪哪些单词重复,并将其计数添加到并行array.But中。我一直在程序末尾崩溃,我删除得不正确吗?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <fstream>
#include <iostream>
#include <cstring>

using std::cout;
using std::cin;
using std::endl;
using std::ifstream;

int GetCount(char filename[50]);

int main()
{
    char filename[50] = "b.txt";
    int choice = 0;
    cout << "Input the file name: ";
    //cin >> filename;
    int numberOfWords = GetCount(filename);
    cout << endl << numberOfWords << endl;

    ifstream fileRead;
    cin.clear();
    cin.ignore(cin.rdbuf()->in_avail());
    fileRead.open(filename);
    if (!fileRead.is_open())
    {
        std::cerr << "\n Error opening file\n";
    }
    else
    {
        //Buffers to get words from file
        char buffer[1000];
        char bufferBuffer[1000];

我在这里声明了导致删除问题的数组

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        //Array of pointers to words
        char ** cStringArray = new char *[numberOfWords];
        *cStringArray = nullptr;
        int add = 1; //Integer in case a word is repeated not to add

                     //Parrallel Array to integers
        int * intPtr = new int;
        *intPtr = 0;

        //Pointers used to check for repeated words
        int * startIntPtr = intPtr;
        int * checkIntPtr = startIntPtr;
        char ** startCStringArray = cStringArray;
        char ** checkCStringArray = cStringArray;

        //Index of Current Word
        int indexOfWord = 0;

        //Variables for character check
        int i = 0;
        int k = 0;

        //Loop to get words from file
        while (fileRead >> buffer)
        {
            //Add Word
            add = 1;

            //Copy only alpha characters
            i = 0;
            k = 0;
            while (buffer[k] != '\0')
            {
                if (isalpha(buffer[k]))
                {
                    bufferBuffer[i] = buffer[k];
                    i++;
                }
                k++;
            }
            bufferBuffer[i] = '\0';
            strcpy(buffer, bufferBuffer);


            //Actually set it in array
            *cStringArray = new char[strlen(buffer) + 1];
            strcpy(*cStringArray, buffer);

            //Compare Against all other cstrings
            for (int ii = 0; ii < indexOfWord; ii++)
            {
                if (strcmp(*checkCStringArray, buffer) == 0)
                {
                    *checkIntPtr += 1;
                    add = 0;
                }

                checkCStringArray++;
                checkIntPtr++;
            }

            //Reset Checks
            checkIntPtr = startIntPtr;
            checkCStringArray = startCStringArray;

            //Move onto next space of cStringArray
            if (add == 1)
            {
                cStringArray++;
                *cStringArray = nullptr;

                //Add one to index
                indexOfWord += 1;

                //Add one to intPtr
                *intPtr += 1;
                intPtr++;
                *intPtr = 0;
            }
            else
            {
                *cStringArray = nullptr;
                *intPtr = 0;
            }
        }
        cStringArray = startCStringArray;

        for (int i = 0; i < indexOfWord; i++)
        {
            cout << *cStringArray << endl;
            cStringArray++;
        }

        cStringArray = startCStringArray;
        intPtr = startIntPtr;

        for (int i = 0; i < indexOfWord + 1; i++)
        {
        cStringArray[i] = nullptr;
        delete[] cStringArray[i];
        }
        cStringArray = startCStringArray;

在这条线上中断

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    delete [] cStringArray;
    /*delete[] intPtr;*/
}
return 0;
}
EN

回答 1

Stack Overflow用户

发布于 2018-01-26 04:51:20

每个new都必须与delete配对。让我们检查一下,好吗?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
char ** cStringArray = new char *[numberOfWords];

配对与

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
delete [] cStringArray;

真棒。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
*cStringArray = new char[strlen(buffer) + 1];

配对与

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
delete[] cStringArray[i];

这一切看起来都不错。

除了..。

让我们用更多的上下文来看一下最后一个。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for (int i = 0; i < indexOfWord + 1; i++)
{
    cStringArray[i] = nullptr;
    delete[] cStringArray[i];
}

嗯。将指针设置为nullptr。删除nullptr。在删除指针之前,程序丢失了指针并泄漏了内存。

如果仔细观察,周围的噪音更小,情况就不太好了。

请注意,这只是删除。代码中可能还有其他我没有看过的问题。乍一看,它似乎过于复杂。这就是Minimal, Complete, and Verifiable example如此有用的原因。如果你去掉所有不必要的东西,它会让错误变得更突出。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48455813

复制
相关文章
pycharm上传文件到服务器_python代码部署到服务器
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/174583.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/27
4.2K0
pycharm上传文件到服务器_python代码部署到服务器
mac怎么上传文件到服务器_shell上传文件到服务器
我们使用mac时,想让本地文件上传至服务器,该怎么办呢 windows系统,我们可以使用xftp或者rz命令,那么mac呢? mac系统,我们可以使用sftp、scp或者rz命令,本文介绍sftp
全栈程序员站长
2022/09/19
13.1K0
mac怎么上传文件到服务器_shell上传文件到服务器
iOS开发中上传JSON字符串到后台服务器
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/72457751
用户1451823
2018/09/13
1.6K0
[android] 上传文件到服务器
前面我们使用普通的方式post提交数据,比较麻烦,现在使用异步框架来实现以下,感觉非常舒服。
唯一Chat
2019/09/10
7.3K0
IOS 上传到后台json数据
今天后台让我传一个类似下图 后台要求的数据格式 我以前还没有这样传过数据。不知道该怎么传,在网上搜了一下,很感谢www.cnblogs.com/yang-guang-girl/p/5642333.ht
honey缘木鱼
2018/06/13
8270
jenkins上传文件到服务器
2、获取文件名,重新命名文件为上传的名字。(mv file_name ${file_name})
@凌晨
2023/09/29
8310
jenkins上传文件到服务器
上传项目代码到Github|Gitee
签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁做的。
WHYBIGDATA
2023/01/31
6850
上传项目代码到Github|Gitee
如何上传代码到github?
1. 先到GitHub: Where the world builds software · GitHub 注册一个账号,此处忽略
全栈程序员站长
2022/11/15
6440
如何上传代码到github?
上传本地代码到github
点击下面的Create repository,就会进入到类似下面的一个页面,拿到创建的仓库的https地址,红框标示的就是
IT小马哥
2020/03/18
7000
idea上传代码到github
在第一次提交的情况下,如果报错 Push rejected: Push to origin/master was rejected。
Twcat_tree
2022/11/30
6960
idea上传代码到github
Springboot上传文件到Linux服务器
jar打包方式不支持将文件动态写入文件,这时需要通过映射的方式将文件上传到映射某一个文件夹,通过映射获取文件,在页面显示。
全栈程序员站长
2022/08/30
5.7K0
Springboot上传文件到Linux服务器
iOS实现上传图片到服务器
当然如果你的项目大的话最好使用开源的网络库ASI或者AFNetWork,库里面都有现有的方法,
用户7705674
2021/10/29
2.8K0
Python上传文件到FTP服务器
代码在python2.7下测试通过!写在最前面! # -*- coding: UTF-8 -*- from ftplib import FTP import os import os.path #上传文件到FTP服务器 def ftp_upload(filename, save_filename): ftp = FTP() ftp.set_debuglevel(0) # 打开调试级别2,显示详细信息;0为关闭调试信息 ftp.connect('bl
苦咖啡
2018/04/28
8.7K0
IOS Alamofire上传文件到服务器
103 @IBAction func touchupInsideUploadingFileBtnAction(_ sender:AnyObject) { 104 let fileURL = Bundle.main.url(forResource:“tortoise”, withExtension:“png”) 105 Alamofire.upload(fileURL!,to:“https://httpbin.org/post”) 106 .validate() 107 .response
用户5760343
2019/07/08
3.6K0
使用linux上传代码到gitee
一、 git的安装 sudo yum -y install git 检查是否安装成功 git --version(这个是输入) git version 1.8.3.1 (若安装成功会自动弹出) 二、过程 1. 仓库链接 首先登录gittee,进入仓库,并找到克隆/下载 点击下载后,找到HTPPS并复制链接 2.linux中的操作 进入你想要传的文件目录中 [yzq@VM-8-8-centos ~]$ cd mk [yzq@VM-8-8-centos mk]$ ls main.c ma
lovevivi
2022/11/10
7080
使用linux上传代码到gitee
Git上传项目代码到github上
1、在github上申请账号,并New Repositories(我的名字是April-Taurus),新建的Repository默认master为其主干分支
杨肆月
2019/08/15
1.2K0
Git上传项目代码到github上
存取json数据到数据库
开发中可能会遇到这样的需求:比如说页面的一个N*N的表格中需要存取多个字段,如下图所示,很明显这里是需要支持动态添加的,如果此时我们建立对应的字段如插入的话,显然是一种比较麻烦的方式,所以我们可以使用在对应的实体类中添加一个List或者是JsonArray字段来表达对应的字段。如图二所示:
关忆北.
2021/12/07
1.3K0
存取json数据到数据库
java图片上传服务器保存路径(如何上传文件到网站服务器)
好了现在重点就是看Upload 这个类了 这个类基本是封装好了的,需要 加的东西可以自己取看看然后修改
Java架构师必看
2022/04/11
8K0
点击加载更多

相似问题

Android分块上传图片和JSON数据到服务器

82

Android上传JSON到服务器错误

21

JSON和上传图片到服务器

21

Javascript / Json / Firestore代码到firestore批量上传

113

如何批量上传JSON数据到Cloudant?

120
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文