用指针返回字符串数组,导致访问冲突

原意为将一个4位整形数组转化成4位十六进制字符串数组,在函数中使用指针来返回数组信息,结果显示访问权限冲突。


#include <iostream>;
#include <math.h>;
#include <string>;

using namespace std;

string dechex(int a)//将数字转成十六进制字符串
{
    string b;
    switch (a)
    {
    case 1:
        b = "1";
        return b;
        break;

    case 2:
        b = "2";
        return b;
        break;

    case 3:
        b = "3";
        return b;
        break;

    case 4:
        b = "4";
        return b;
        break;

    case 5:
        b = "5";
        return b;
        break;

    case 6:
        b = "6";
        return b;
        break;

    case 7:
        b = "7";
        return b;
        break;

    case 8:
        b = "8";
        return b;
        break;

    case 9:
        b = "9";
        return b;
        break;

    case 10:
        b = "A";
        return b;
        break;

    case 11:
        b = "B";
        return b;
        break;

    case 12:
        b = "C";
        return b;
        break;

    case 13:
        b = "D";
        return b;
        break;

    case 14:
        b = "E";
        return b;
        break;

    case 15:
        b = "F";
        return b;
        break;
    }
        
}


int *split(int a)//将数字按位数分成四组十六进制数,每组两位
{
    int* Arraytest01 = new int[4];
 
    for (int i = 0; i < 4; i++)
    {
        Arraytest01[i] = a / pow(16, 6 - 2 * i);
        int temp = a - Arraytest01[i] * pow(16, 6 - 2 * i);
        a = temp;
    }
    return Arraytest01;
}

string *coversion(int a[4]) //将数字组转成十六进制字符串组
{
    string* Arraytest02 = new string[4];
    for (int i = 0; i < 4; i++)
    {
        int b = a[i] / 16;
        int c = a[i] % 16;
        string d = " ";
        d += dechex(b);
        d += dechex(c);
        Arraytest02[i] = d;
     }
    return Arraytest02;
}


int main()
{
    int Array[4] = { 16,17,18,19 };
    string* Array01 = coversion(Array);
    for (int i = 0; i < 4; i++)
    {
        cout << Array01[i] << endl;
    }
    
    system("pause");
    return 0;
}

img


修改了一下,我这里可以运行

 
#include <iostream>
#include <cmath>
#include <cstring>
 
using namespace std;
 
string dechex(int a)//将数字转成十六进制字符串
{
    string b = "0";
    switch (a)
    {
    case 1:
        b = "1";
        return b;
        break;
 
    case 2:
        b = "2";
        return b;
        break;
 
    case 3:
        b = "3";
        return b;
        break;
 
    case 4:
        b = "4";
        return b;
        break;
 
    case 5:
        b = "5";
        return b;
        break;
 
    case 6:
        b = "6";
        return b;
        break;
 
    case 7:
        b = "7";
        return b;
        break;
 
    case 8:
        b = "8";
        return b;
        break;
 
    case 9:
        b = "9";
        return b;
        break;
 
    case 10:
        b = "A";
        return b;
        break;
 
    case 11:
        b = "B";
        return b;
        break;
 
    case 12:
        b = "C";
        return b;
        break;
 
    case 13:
        b = "D";
        return b;
        break;
 
    case 14:
        b = "E";
        return b;
        break;
 
    case 15:
        b = "F";
        return b;
        break;
    }
    return b;   
}
 
 
int *split(int a)//将数字按位数分成四组十六进制数,每组两位
{
    int* Arraytest01 = new int[4];
 
    for (int i = 0; i < 4; i++)
    {
        Arraytest01[i] = a / pow(16, 6 - 2 * i);
        int temp = a - Arraytest01[i] * pow(16, 6 - 2 * i);
        a = temp;
    }
    return Arraytest01;
}
 
string *coversion(int a[4]) //将数字组转成十六进制字符串组
{
    string* Arraytest02 = new string[4];
    for (int i = 0; i < 4; i++)
    {
        int b = a[i] / 16;
        int c = a[i] % 16;
        string d = " ";
        d += dechex(b);
        d += dechex(c);
        Arraytest02[i] = d;
     }
    return Arraytest02;
}
 
 
int main()
{
    int Array[4] = { 16,17,18,19 };
    string* Array01 = coversion(Array);
    for (int i = 0; i < 4; i++)
    {
        cout << Array01[i] << endl;
    }
    
    system("pause");
    return 0;
}

增加了一个返回值,感谢