如何修复初始化后'stack around variable was corrupted.'变量未更改为分配的值
How to fix 'stack around variable was corrupted.' Variables not changing to assigned value after initialization
所以我的合并排序代码工作了,然后在我尝试获取运行时时开始出现一些错误。现在,我得到"数组已损坏",我认为这是因为在初始化"left_bound"和"right_bound"后,即使我很确定我正确分配了它们,值也不会改变。所以它们是一些巨大的负数,超出了数组的范围,导致它被损坏(我认为(。
我尝试以我在谷歌上可以找到的各种可能的方式进行分配和初始化。
void merge(int arr[], int low_idx, int partition, int high_idx) {
int i, j, k, right_bound;
int left_bound (partition - low_idx + 1);
right_bound = (high_idx - partition);
//temporary arrays
int* left_of_partition = NULL;
int* right_of_partition = NULL;
left_of_partition = new int[left_bound];
right_of_partition = new int[right_bound];
for (i = 0; i < left_bound; i++) {
left_of_partition[i] = arr[i + low_idx];
}
for (j = 0; j < right_bound; j++) {
right_of_partition[j] = arr[partition + 1 + j];
}
i = 0;
j = 0;
k = 1;
while (i < left_bound && j < right_bound) {
if (left_of_partition[i] < right_of_partition[j]) {
arr[k] = left_of_partition[i];
i++;
}
else {
arr[k] = right_of_partition[j];
j++;
}
k++;
}
while (i < left_bound) {
arr[k] = left_of_partition[i];
i++;
k++;
}
while (j < right_bound) {
arr[k] = right_of_partition[j];
j++;
k++;
}
delete[] left_of_partition;
delete[] right_of_partition;
left_of_partition = NULL;
right_of_partition = NULL;
}
void mergesort(int arr[], int low_idx, int high_idx)
{
if (high_idx > low_idx) {
int partition = (low_idx + high_idx) / 2;
mergesort(arr, low_idx, partition);
mergesort(arr, partition + 1, high_idx);
merge(arr, low_idx, partition, high_idx);
}
}
int main()
{
int v2[] = { 9,8,7,6,5,4,3,2,1,0 };
int max_idx = sizeof(v2) - 1;
mergesort(v2, 0, max_idx);
}
sizeof(v2)
返回完整数组的内存大小 (= 10 * 4 = 40
(。您必须使用sizeof(array) / sizeof(element)
才能获得正确的数字。 当大小 = 40 时,您的代码正在写入 10 个元素的本地(堆栈数组(后面的内存,这会损坏堆栈:
int main()
{
int v2[] = { 9,8,7,6,5,4,3,2,1,0 };
int max_idx = sizeof(v2) / sizeof(int) - 1; // divide by sizeof(int)
mergesort(v2, 0, max_idx);
return 0;
}
相关文章:
- 是否可以使用其他变量为变量分配值,而无需在 C++ 中更改其值?
- 将字符串变量分配给无符号字符变量
- 将延迟变量分配给引用变量
- 为什么以下变量分配不正确
- 如何在 c++ 中将两个不同类型的变量分配给一个变量
- C++ 无法将字符数组变量分配给字符串变量
- 直接为浮点变量分配十六进制整数与通过指针转换分配之间的区别
- 识别矩阵变量分配的行为
- C 为什么在原始双阵列中的分配似乎比双变量分配要快得多
- C++:如何将 char 变量分配给向量<char>并访问该向量的元素进行比较?
- 将局部方法变量分配给类指针
- 类构造函数中的静态成员变量分配
- 如果条件语句中的变量分配
- C++ - 将一个变量分配给另一个变量和将变量分配给引用变量有什么区别?
- 需要帮助了解指针变量分配
- 从值捕获的变量分配到lambda参数时,GCC编译器分割故障
- 将非按引用变量分配给返回按引用的函数,反之亦然
- 通过结构指针访问结构变量分配错误数据
- 分段故障(核心倾倒)变量分配
- 在名称空间之外的C 中的外部变量分配值