double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size) {
int* asd;
bool flag1 = false, flag2 = false;
asd = malloc(sizeof(int) * (nums1Size + nums2Size));
int br1 = 0, br2 = 0;
for (int i = 0; i < (nums1Size + nums2Size); i++) {
if (flag1) {
asd[i] = nums2[br2];
br2++;
} else if (flag2) {
asd[i] = nums1[br1];
br1++;
} else if (nums1[br1] >= nums2[br2]) {
asd[i] = nums2[br2];
br2++;
if (br2 == nums2Size) {
br2--;
flag2 = true;
}
} else {
asd[i] = nums1[br1];
br1++;
if (br1 == nums1Size) {
br1--;
flag1 = true;
}
}
printf("%d\n", asd[i]);
}
if ((nums1Size + nums2Size) % 2 == 0) {
double a = (asd[(nums1Size + nums2Size) / 2] + asd[(nums1Size + nums2Size) / 2 - 1]);
return a / 2;
} else {
return asd[(nums1Size + nums2Size) / 2];
}
}
测试用例很好,但无法提交。
当我尝试提交代码时,出现以下错误:
==23==错误:AddressSanitizer:地址 0x6020000001f0 上的堆缓冲区溢出
... 摘要:AddressSanitizer:findMedianSortedArrays 中的堆缓冲区溢出 solution.c:16
...
我怀疑问题是由于 br1 或 br2 超出了它们各自数组(nums1 或 nums2)的边界。我尝试为 br1 和 br2 添加边界检查,但仍然无法解决问题。我还验证了动态分配数组 asd 的大小(应该是 nums1Size + nums2Size),它似乎是正确的。合并数组或访问其元素的逻辑是否存在错误?我如何确保我不会访问 nums1 或 nums2 的越界内存?有没有更有效的方法来解决这个问题?