C++在通过new为指针分配内存空间时,不能正常分配空间
调试的时候显示unknown signal
我使用的开发环境是visual studio code
内存卡 8g
问题相关代码如下
主要问题出在matcher(int *array1, int length1, int *array2, int length2, int &length)这里的第二行,不能正常的为这个指针分配空间
#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函数不能正常运行,所以出现指针错误。
我的解答思路和尝试过的方法
将指针放在主函数中定义和分配空间,或者作为全局函数定义之后传引用,但并没有效果。
这个问题经常发生,希望有经验的伙伴们能够告诉我一下这个问题的原因。
我想要达到的结果
使得这个指针能够正常分配内存空间。