原先代码
int removeDuplicates(int* nums, int numsSize){
int x = nums[numsSize-1];
int len = numsSize;
int k = numsSize-2;
do{
if(nums[k] == x){
for(int j = k+1; j < len-1; j++){
nums[j] = nums[j+1];
}
len--;
x = nums[k];
}
else {
x = nums[k];
}
k--;
}while(k+1);
return numsSize = len;
}
heap-buffer-overflow 的意思就是访问数组越界。
错误的原因也挺简单:题目让删除重复的项,当数组只有一个数或者数组为空时,直接返回numsSize的值即可。当试样为空数组时,数组原先代码中对数组的访问即为越界。
通过代码
int removeDuplicates(int* nums, int numsSize){
if(numsSize == 0 || numsSize == 1){
return numsSize;
}
else{
int x = nums[numsSize-1];
int len = numsSize;
int k = numsSize-2;
do{
if(nums[k] == x){
for(int j = k+1; j < len-1; j++){
nums[j] = nums[j+1];
}
len--;
x = nums[k];
}
else {
x = nums[k];
}
k--;
}while(k+1);
return numsSize = len;
}
}
感谢zhangpeterx的分享让我搞懂了这个。