gpt4 book ai didi

c - 0xC0000374 : A heap has been corrupted (parameters: 0x77AAB960)

转载 作者:行者123 更新时间:2023-11-30 20:17:01 27 4
gpt4 key购买 nike

下面的代码有时会引发类似于以下内容的异常:

Matriks.exe 中的 0x779CC19E (ntdll.dll) 处抛出异常:0xC0000005:读取位置 0x0000001D 时发生访问冲突。

我是 C 新手,刚刚学会使用指针。有小费吗 ?我的代码中还有其他值得批评的问题吗?

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

main()
{
int *Matrix_01, *Matrix_02;
int a, b, i, n,valid=1;
srand(time(0));
do
{
printf("Insert number of rows: ");
scanf("%d", &a);
printf("Insert number of columns: ");
scanf("%d", &b);
if (a >= 0 && b >= 0)
valid = 0;
else
{
printf("Invalid input!");
system("pause>null & cls");
}
} while (valid == 1);

Matrix_01 = (int *)malloc(a * b * sizeof(int));
Matrix_02 = (int *)malloc(a * b * sizeof(int));
for (i = 0; i < a; i++)
for (n = 0; n < b; n++)
{
Matrix_01[a*i + n] = rand() % 50;
Matrix_02[a*i + n] = rand() % 50;
}
printf("\nFirst Matrix:\n");
for (i = 0; i < a; i++)
{
printf("\n");
for (n = 0; n < b; n++)
{
printf("%4d", Matrix_01[a*i + n]);
}
}
printf("\n\nSecond Matrix:\n");
for (i = 0; i < a; i++)
{
printf("\n");
for (n = 0; n < b; n++)
{
printf("%4d", Matrix_02[a*i + n]);
}
}
printf("\n\nAddition:\n");
for (i = 0; i < a; i++)
{
printf("\n");
for (n = 0; n < b; n++)
{
printf("%4d", Matrix_01[a*i + n]+Matrix_02[a*i + n]);
}
}
printf("\n\nSubtraction:\n");
for (i = 0; i < a; i++)
{
printf("\n");
for (n = 0; n < b; n++)
{
printf("%4d", Matrix_01[a*i + n] - Matrix_02[a*i + n]);
}
}
printf("\n");
system("pause>null");
}

最佳答案

在这种情况下,堆已损坏意味着您写出了有效分配的区域。

检查索引的最小值和最大值:

  • i 范围从 0a-1
  • n 范围从 0b-1

因此,a*i + n 的范围是从 0a*(a+1) + b。所以它与矩阵维度不匹配。如果 a 大于 b 内存将会损坏。

您需要将其替换为 b*i + n(范围从 0b*(a-1) + b => a*b

您还希望避免在读取输入时允许 ab 为零。实际上,最好通过检查返回码来检查 scanf 是否成功扫描一个值,然后检查值是否大于零(但不等于)或者使用 2D 矩阵(或计算行上的指针一次以避免这些计算)

关于c - 0xC0000374 : A heap has been corrupted (parameters: 0x77AAB960),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58962573/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com