是什么导致程序在我继续执行另一个功能之前停止

What is causing the program to stop before I can continue with another function?

本文关键字:功能 另一个 执行 继续 程序 是什么      更新时间:2023-10-16

我正在研究在此程序排序后使用的二进制搜索,并且我不确定在按字母顺序对字母进行排序后如何停止崩溃。

主.cpp

#include <iostream>
#include "ReadString.h"
#include "SortString.h"
#include "SearchString.h"
using namespace std;
int main()
{
    int i;
    int column = 500;
    int row = 20;
    char    *inputsearch;
    cout << "How many names will you enter? ";
    cin >> row;
    while (row > 20 || row < 0)
    {
        cout << "Error: Please do not enter more than 20 or less than 0: ";
        cin >> row;
    }
    char **p = ReadString(row, column);
    cout << "Printed: " << endl;
    for (i = 0; i < row; i++)
    {
        cout << *(p + i) << endl;
    }
    StringSort(p, row);
    cin >> inputsearch;
    cout << inputsearch;
    SearchString(p, inputsearch);


    for (i = 0; i < row; i++)
        delete[] p[i];
    delete[] p;
    return 0;
}

读取字符串.cpp

#include <iostream>
#include <cstring>
#include "ReadString.h"
using namespace std;
char **ReadString(int row, int column)
{
    char **String = 0;
    int i;
    String = new char *[row];
    int NumChars;
    for (i = 0; i < row; i++)
        String[i] = new char[column];
    for (i = 0; i < row; i++)
    {
        cout << "Enter name " << i + 1 << ": ";
        cin >> String[i];
        NumChars = strlen(String[i]);
    }
    return String;
}

读取字符串.h

    #ifndef READ_STRING_H
#define READ_STRING_H
char **ReadString(int, int);

#endif

排序字符串.cpp

#include<iostream>
#include<conio.h>
#include<stdio.h>
#include "SortString.h"
using namespace std;
void StringSort(char **str, int row)
{
    char t[20];
    int i, j, k;
    for (i = 1; i < row; i++)
    {
        for (j = 1; j < row; j++)
        {
            //compare each 
            if (strcmp(str[j - 1], str[j])>0)
            {
                strcpy(t, str[j - 1]);
                strcpy(str[j - 1], str[j]);
                strcpy(str[j], t);
            }
        }
    }
    cout << "Strings (Names) in alphabetical order : n";
    for (i = 0; i < 5; i++)
    {
        cout << str[i] << "n";
    }
    getch();
}

SortString.h

#ifndef SORT_STRING_H
#define SORT_STRING_H
void StringSort(char **, int);
#endif

搜索字符串.cpp

#include <string.h>
#include "SearchString.h"
int SearchString(char **p, char *inputsearch)
{
    int     First;
    int     Middle;
    int     Last;
    First = 0;
    Last = strlen(*p) - 1;
    do {
        Middle = (First + Last) / 2;
        if (inputsearch == p[Middle])
            return Middle;
        else
            if (inputsearch > p[Middle])
                First = Middle + 1;
            else
                Last = Middle - 1;
    } while (First <= Last);
    return -1;
}

SearchString.h

#ifndef Search_String_H
#define Search_String_H
int SearchString(char **, char *);
#endif

当你这样做时 cin>> 字符串[i];在 ReadString.cpp 中,您不确保输入长度加上空终止符的字符少于大小为"列"的数组所允许的字符数。如果您输入的内容包含的字符数超过列的宽度,则会损坏您的免费存储堆。