数字的可能性有:
最后一位不是“9”的:1234、2358
最后一位为“9”但前面几位有非“9”的:1259、8999
全为“9”:99、999、9999
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* plusOne(int* digits, int digitsSize, int* returnSize){
int i=digitsSize-1;
for(;i>=0;i--){
if(digits[i]!=9){
*returnSize=digitsSize;
digits[i]++;
return digits;
}
if(digits[i]==9)
digits[i]=0;
}
int *result=(int*)malloc(sizeof(int)*++digitsSize);
memset(result,0,sizeof(int)*digitsSize);
result[0]=1;
*returnSize=digitsSize;
return result;
}
最开始使用在for里判断第三种情况,但是会出现runtime error: load of null pointer of type ‘int’ (Serializer.c)
代码:
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* plusOne(int* digits, int digitsSize, int* returnSize){
int i=digitsSize-1;
for(;i>=0;i--){
if(digits[i]!=9){
*returnSize=digitsSize;
digits[i]++;
return digits;
}
if(digits[i]==9)
digits[i]=0;
if(i==0&&digits[i]==9){
digits[0]=1;
digits[digitsSize]=0;
*returnSize=digitsSize++;
return digits;
}
}
return 0;
}
在调用函数时,如果返回值如果是一个常量则没问题。如果返回值若为指针则可能会出现该错误,假如返回的指针地址指向函数内的局部变量,在函数退出时,该变量的存储空间会被销毁,此时去访问该地址就会出现这个错误。
解决办法有以下三种:
1.返回的指针使用malloc分配空间 2.将该变量使用static修饰 static修饰的内部变量作用域不变 但是声明周期延长到程序结束 即该变量在函数退出后仍然存在 3.使用全局变量
原文链接:https://blog.csdn.net/qq_34824576/article/details/86496130