weixin_61608163 2022-07-08 18:37 采纳率: 0%
浏览 40

C++指针new分配空间异常,如何解决?

C++在通过new为指针分配内存空间时,不能正常分配空间

调试的时候显示unknown signal
我使用的开发环境是visual studio code
内存卡 8g

问题相关代码如下

主要问题出在matcher(int *array1, int length1, int *array2, int length2, int &length)这里的第二行,不能正常的为这个指针分配空间

img

#include <iostream>
#include <cmath>
using namespace std;
int left, right, left_length, right_length;
int *left_factor = new int[left_length](), *left_upper = new int[left_length]();     // ok
int *right_factor = new int[right_length](), *right_upper = new int[right_length](); // ok
int premium_length = 1, *premium_number = new int[premium_length]();                 // ok

bool check(int number)
{
    int test = 2;
    for (; test <= pow(number, 0.5); test++)
    {
        if (number % test == 0)
        {
            return false;
        }
    }
    return true;
}

void premium() // 50
{
    for (int i = 2; i < 50; i++)
    {
        if (check(i) == true)
        {
            ::premium_number[::premium_length - 1] = i;
            ::premium_length++;
        }
    }
    ::premium_length--;
}

void premium_factor(int number, int *factor, int *upper, int &length)
{
    length = 2;
    factor[0] = 1;
    upper[0] = 1;
    upper[1] = 0;
    for (int i = 0; i < ::premium_length && ::premium_number[i] <= number; i++)
    {
        if (number % (::premium_number[i]) == 0)
        {
            int temp = number;
            for (; temp % (::premium_number[i]) == 0;)
            {
                upper[length - 1]++;
                temp /= ::premium_number[i];
            }
            factor[length - 1] = ::premium_number[i];
            length++;
            upper[length - 1] = 0;
            factor[length - 1] = 0;
        }
    }
    length--;
}

int *matcher(int *array1, int length1, int *array2, int length2, int &length)
{
    int len = 1;
    int *match = new int[len]();
    for (int i = 0; i < length1; i++)
    {
        for (int j = 0; j < length2 && array1[i] >= array2[j]; j++)
        {
            if (array1[i] == array2[j])
            {
                match[len - 1] = array1[i];
                len++;
                match[len - 1] = 0;
            }
        }
    }
    length = len - 1;
    return match;
}

int get_GCD(int *match, int match_length, int *factor1, int *upper1, int length1, int *factor2, int *upper2, int length2)
{
    int result = 1, temp1, temp2;
    for (int i = 0; i < match_length; i++)
    {
        for (int j = 0; j < length1; j++)
        {
            if (factor1[j] == match[i])
            {
                temp1 = upper1[j];
                break;
            }
        }
        for (int j = 0; j < length2; j++)
        {
            if (factor2[j] == match[i])
            {
                temp2 = upper2[j];
                break;
            }
        }
        if (temp1 > temp2)
        {
            result *= pow(match[i], temp2);
        }
        else
        {
            result *= pow(match[i], temp1);
        }
    }
    return result;
}

void display(int *array, int length)
{
    for (int i = 0; i < length; i++)
    {
        cout << array[i] << ' ';
    }
    cout << '\n';
}

int main()
{
    int *match = NULL, match_length = 0, result;
    cin >> ::left >> ::right;
    premium();
//    display(::premium_number, ::premium_length);
    premium_factor(::left, ::left_factor, ::left_upper, ::left_length);
    premium_factor(::right, ::right_factor, ::right_upper, ::right_length);
//    display(::left_factor, ::left_length);
//    display(::left_upper, ::left_length);
//    display(::right_factor, ::right_length);
//    display(::right_upper, ::right_length);
    match = matcher(::left_factor, ::left_length, ::right_factor, ::right_length, match_length);
//    display(match, match_length);
    result = get_GCD(match, match_length, ::left_factor, ::left_upper, ::left_length, ::right_factor, ::right_upper, ::right_length);
    cout << result;
    return 0;
}

运行结果及报错内容
16 10
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 
1 2
1 4
1 2 5
1 1 1

这下边本来应该还有一行结果的,未出现,但是经过调试,发现matcher函数不能正常运行,所以出现指针错误。

我的解答思路和尝试过的方法

将指针放在主函数中定义和分配空间,或者作为全局函数定义之后传引用,但并没有效果。
这个问题经常发生,希望有经验的伙伴们能够告诉我一下这个问题的原因。

我想要达到的结果

使得这个指针能够正常分配内存空间。

  • 写回答

1条回答 默认 最新

  • 叶落秋白 后端领域优质创作者 2022-07-08 19:41
    关注

    修改那一行代码:

     int *match = new int [len];
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 7月8日

悬赏问题

  • ¥15 pyqt怎么把滑块和输入框相互绑定,求解决!
  • ¥20 wpf datagrid单元闪烁效果失灵
  • ¥15 券商软件上市公司信息获取问题
  • ¥100 ensp启动设备蓝屏,代码clock_watchdog_timeout
  • ¥15 Android studio AVD启动不了
  • ¥15 陆空双模式无人机怎么做
  • ¥15 想咨询点问题,与算法转换,负荷预测,数字孪生有关
  • ¥15 C#中的编译平台的区别影响
  • ¥15 软件供应链安全是跟可靠性有关还是跟安全性有关?
  • ¥15 电脑蓝屏logfilessrtsrttrail问题