Lauguage:C ++
我必须使功能'添加'超载。
'添加' function有一个数组a []作为参数。
我编写了我的代码,但它没有用。
没有任何错误或警告但它不会启动。
我的代码有什么问题?
int add(int a[], int n, int b[])
{
int sum = 0;
for (int i = 0; i < n; i++)
sum += (a[i] + b[i]);
return sum;
}
int add(int a[], int n=5)
{
return add(a, n, NULL);
}
答案 0 :(得分:1)
当你以你的方式声明像array这样的参数时(例如int a[]
),编译器实际上将参数声明为指针。
在add
函数的三参数重载中,第三个参数(b
)可能是一个空指针,您不检查它。尝试取消引用空指针会导致未定义的行为和可能的崩溃。
如果它是空指针,请不要访问b
。
int add(int* a, int n, int* b)
{
int sum = 0;
for (int i = 0; i < n; i++)
{
if (b == nullptr)
sum += a[i];
else
sum += a[i] + b[i];
}
return sum;
}
答案 1 :(得分:1)
sum += (a[i] + b[i]);
索引b
,可以是NULL
。这是未定义的行为。
避免陷阱的一个好方法是使用std::vector
。