#include <stdio.h>
int* plusOne(int* digits, int digitsSize, int* returnSize){
int* result=0;
if (digits[digitsSize-1]<9){
*returnSize=digitsSize;
int* result = (int *)malloc(*returnSize*(sizeof(int)));
memcpy( result, digits, *returnSize*(sizeof(int)) );
result[digitsSize-1]= (result[digitsSize-1])+1;
}
return result;
}
int main()
{
int array[3]={1,2,3};
int* resultSize= malloc(sizeof(int));
int* result = plusOne(&array,3,resultSize);
printf("%i",result[2]);
return 0;
}
上面的代码在printf("%i",result[2]);
处出现段错误,因为由于某种原因导致结果为0 ...但是,当我将return result;
放在if语句中时,该代码将按预期工作。
为什么会这样?无论在这种情况下,都会对if进行评估,并且收益将相同。它是编译器优化吗? (它只是跳过if语句?)
答案 0 :(得分:2)
函数result
中有两个对象,标识符为plusOne()
。
int* plusOne(int* digits, int digitsSize, int* returnSize){
int* result=0;
// ^^^^^^
if (digits[digitsSize-1]<9){
*returnSize=digitsSize;
int* result = (int *)malloc(*returnSize*(sizeof(int)));
// ^^^^^^ inner result
memcpy( result, digits, *returnSize*(sizeof(int)) );
result[digitsSize-1]= (result[digitsSize-1])+1;
}
return result;
}
当您从if
内部返回时,您将返回内部result
;否则,您将返回外部的。