我写了一些代码,它向我显示了此错误:Ficha 5.exe中在0x00007FF93F57B016(ucrtbased.dll)引发异常:0xC0000005:读取访问位置0xFFFFFFFFFFFFFFFFFF的访问冲突。
我找不到背后的原因。
#include <stdio.h>
#define num 10
void ler_matriz(int **matriz1, int n, int m);
void mostrar_matriz(int matriz1[num][num], int n, int m);
//int num_min_matriz(int matriz1[][], int n, int m);
//void teste_simetria(int matriz1[][], int n, int m);
//void transposta_matriz(int matriz1[][], int n, int m);
//void soma_matriz(int matriz1[][], int matriz2[][], int matriz3[][], int n, int m);
int main()
{
int x[num][num], y[num][num], z[num][num], numL, numC;
printf("Introduza o número de linhas e colunas para a matriz:\n");
scanf(" %d%d", &numL, &numC);
printf("\n\nIntroduza os valores para a matriz 1: ");
ler_matriz(x, numL, numC);
mostrar_matriz(x, numL, numC);
return 0;
}
void ler_matriz(int **matriz1, int n, int m)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
printf("\nx[%d][%d]: ", i + 1, j + 1);
scanf(" %d", &matriz1[i][j]); // the exception error
}
}
}
void mostrar_matriz(int matriz1[num][num], int n, int m)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; i < m; j++)
{
printf("%d ", matriz1[i][j]);
}
putchar('\n');
}
}
答案 0 :(得分:1)
您有:
for (int j = 0; i < m; j++)
应该是
for (int j = 0; j < m; j++)
否则,i < m
将永远是正确的(因为您不会在该循环中更改i
),最终您将访问0xFFFFFFFFFFFFFFFFFF(内存的最边缘)。>
答案 1 :(得分:1)
对于这样的内存错误,一个好主意是使用内存检查工具(您可以尝试valgrind memcheck)。现在,让我们看看您的代码出了什么问题:)
您必须考虑到#include<iostream>
using namespace std;
class two;
class one{
int sno;
public:
one()
{
sno=312;
}
friend two operator =(one,two);
};
//b b1; b1=a.seatno;
class two{
int seatno;
public:
two(){seatno=0;
}
friend two operator = (one,two);
};
two operator = (one a1,two b1)
{
b1.seatno=a1.sno;
return b1;
}
int main()
{
one a1;
two b1;
b1=a1;
}
与int[m][n]
不同。使用gcc编译器,您会收到关于它的警告。 (当然,您可以更改代码以使用int**
)
就像VoteyDisciple所说的那样,您应该使用
int**
代替
for (int j=0;j<m;j++)
创建数组而不进行初始化可能会导致稍后发生内存错误(假设我们在谈论C-某些语言使用0初始化数组)。在这里,您创建了for(int j=0;i<m;j++)
矩阵,但最终使用了分配值的部分矩阵。其余的未初始化,如果以后再尝试访问它们,可能会遇到错误。
您确实由于上述原因而获得了例外,因为您尝试访问x,y,z
处的内存地址时遇到错误
这是我编写您的代码以使其起作用的方式:
&matriz1[i][j]