Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/156.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 删除动态数组后的堆损坏_C++_Error Handling_Runtime Error_Heap Corruption - Fatal编程技术网

C++ 删除动态数组后的堆损坏

C++ 删除动态数组后的堆损坏,c++,error-handling,runtime-error,heap-corruption,C++,Error Handling,Runtime Error,Heap Corruption,我知道这个问题被问了很多次,但我找不到解决我错误的方法 我试图制作一个程序来检查给定的矩阵是否对称。用户输入测试用例的数量,然后是大小,然后是矩阵,输出是否对称 该程序工作正常,直到我尝试一个大于3的大小,它就会因此错误而中断,并且在调试时,它似乎在delete[]arrL处中断 #include <iostream> #include <string> using namespace std; int n(char s) { switch (s) {

我知道这个问题被问了很多次,但我找不到解决我错误的方法 我试图制作一个程序来检查给定的矩阵是否对称。用户输入测试用例的数量,然后是大小,然后是矩阵,输出是否对称 该程序工作正常,直到我尝试一个大于3的大小,它就会因此错误而中断,并且在调试时,它似乎在delete[]arrL处中断

#include <iostream>
#include <string>
using namespace std;
int n(char s)
{
    switch (s)
    {
    case '0':
        return 0;
    case '1':
        return 1;
    case '2':
        return 2;
    case '3':
        return 3;
    case '4':
        return 4;
    case '5':
        return 5;
    case '6':
        return 6;
    case '7':
        return 7;
    case '8':
        return 8;
    case '9':
        return 9;
    }
}
int getnumber(string a)
{
    string num = "";
    for (int i = 0; i < a.size(); i++)
    {
        if (isdigit(a[i]))
            num += a[i];
    }
    if (num.size() == 1)
    {
        return n(num[0]);
    }
    if (num.size() == 2)
    {
        return (n(num[0]) * 10) + (n(num[1]));
    }

    if (num.size() == 3)
    {
        return (n(num[0]) * 100) + (n(num[1]) * 10) + (n(num[2]));
    }
}
bool matrix2(long  int**p, int r)
{

    int c = 0, u = 0, ss = 0;
    for (int i = 0; i < r; i++)
    {
        for (int j = 0; j < r; j++)
        {
            if (p[i][j]<0)
                return false;
        }
    }
    long  int*arrL = new long  int[r];
    long  int*arrR = new long  int[r];
    for (int i = 0; i < r; i++)
    {
        for (int j = 0; j < i; j++)
        {
            arrL[c++] = p[i][j];
            ss++;
        }
    }   
    for (int i = 0; i < r; i++)
    {
        for (int j = i + 1; j < r; j++)
        {
            arrR[u++] = p[i][j];
        }
    }
    for (int i = 0; i < ss; i++)
    {
        int q = ss - i - 1;
        long  int a = arrR[i];
        long  int b = arrL[q];
        if (!(a == b))
        {
            delete[]arrL;
            delete[]arrR;
            return false;
        }
        }


    delete[]arrL;
    delete[]arrR;
    return true;
}
int main()
{
    int t;
    cin >> t;
    for (int num = 0; num < t;num++)
    {

        int yy = num + 1;
        string dimension;
        cin.ignore();
        getline(cin, dimension);
        int r = getnumber(dimension);
        long  int**p = new  long int*[r];
        for (int w = 0; w < r; w++){
            p[w] = new  long int[r];
        }
        for (int w = 0; w < r; w++)
        {
            for (int ww = 0; ww < r; ww++)
            {
                cin >> p[w][ww];
            }
        }
    bool result = matrix2(p, r);
        if (result)
        {
            cout << "Test #" << yy << ": Symmetric." << endl;
        }
        else
        {
            cout << "Test #" << yy << ": Non-symmetric." << endl;
        }
        for (int i = 0; i < r; i++)
        {
            delete[]p[i];
        }
        delete[] p;
    }

    return 0;

}
#包括
#包括
使用名称空间std;
整数n(字符s)
{
开关
{
案例“0”:
返回0;
案例“1”:
返回1;
案例“2”:
返回2;
案例“3”:
返回3;
案例“4”:
返回4;
案例“5”:
返回5;
案例“6”:
返回6;
案例“7”:
返回7;
案例“8”:
返回8;
案例“9”:
返回9;
}
}
int getnumber(字符串a)
{
字符串num=“”;
对于(int i=0;it;
for(int num=0;num>p[w][ww];
}
}
布尔结果=矩阵2(p,r);
如果(结果)
{

coutarrL和arrR被分配为大小r,但是 arrL[c++]=p[i][j]; 执行的次数超过r次,因此c超过r,因此您已经损坏了堆。

int n(char s){return s-'0';}
更好吗?