这是我正在解决的LeetCode问题-
给定一个长度为n的整数数组nums,你想创建一个长度为2n的数组ans,其中ans[i] == nums[i]和ans[i + n] == nums[i],0〈= i〈n(0-索引)。
具体来说,ans是两个nums数组的连接。
示例:
输入:nums = [1,2,1]输出:[1,2,1,1,2,1]
这是我写的代码
int* getConcatenation(int* nums, int numsSize, int* returnSize){
*returnSize = numsSize*2;
int* ans = malloc(numsSize * 2 * sizeof(int));
for(int i=0; i<numsSize*2; i++){
ans[i] = nums[i];
ans[i + numsSize] = nums[i];
}
return ans;
}
这是heap-buffer-overflow错误,我在这里做错了什么?PS:我是编程新手。截图附件ScreenShot
我尝试使用realloc()重新分配内存,但没有成功。
1条答案
按热度按时间q3aa05251#
很明显,由于for循环
i<numsSize*2
中的条件索引表达式
ans[i + numsSize]
中的i + numsSize
和nums[i]
中的i
提供了对两个阵列之外的存储器的访问,这导致未定义的行为。如果使用标准的C函数
memcpy
,则该函数看起来足够简单。如果你想使用for循环,那么函数可以看起来像下面这样