C 不允许输入的动态分配矩阵
程序只需从键盘填充一个动态分配的矩阵。 我必须补充一点,我包括在内。我正在研究C++编译器,因此我必须把MCAL添加到MaloC中。在到达gets(一个[i])命令时,它似乎有以下错误:“ConsoleApplication42.exe中0x0F92FB53(msvcr120d.dll)处的未处理异常:0xC0000005:访问冲突读取位置0xCDCDCDCD。”。 在调试之后,它似乎在自由序列上也有一个非常恰当的问题C 不允许输入的动态分配矩阵,c,input,matrix,dynamically-generated,C,Input,Matrix,Dynamically Generated,程序只需从键盘填充一个动态分配的矩阵。 我必须补充一点,我包括在内。我正在研究C++编译器,因此我必须把MCAL添加到MaloC中。在到达gets(一个[i])命令时,它似乎有以下错误:“ConsoleApplication42.exe中0x0F92FB53(msvcr120d.dll)处的未处理异常:0xC0000005:访问冲突读取位置0xCDCDCDCD。”。 在调试之后,它似乎在自由序列上也有一个非常恰当的问题 int main() { int n, i; char **
int main()
{
int n, i;
char **a;
printf("introduceti numarul de cuvinte:\n");
scanf("%d", &n);
a = (char**)malloc(n*sizeof(char*));
if (!a)
printf("alocare nereusita");
for (i = 0; i < n; i++);
{
a[i] = (char*)malloc(56 * sizeof(char));
}
for (i = 0; i < n; i++)
{
printf("introduceti urmatorul cuvant:\n");
gets(a[i]);
}
for (i = 0; i < n; i++)
free(a[i]);
free(a);
return 0;
}
intmain()
{
int n,i;
字符**a;
printf(“numarul de cuvinte简介:\n”);
scanf(“%d”和“&n”);
a=(char**)malloc(n*sizeof(char*);
如果(!a)
printf(“alocare nereusita”);
对于(i=0;i
在第一个for循环头后面有一个额外的分号 在第一个for循环头之后有一个额外的分号 以上答案是正确的
因为额外的
,您正在执行a[n]=…
,这显然是内存访问冲突
此外,如果用户输入的字符超过55个,您的代码仍将执行另一个内存访问冲突。因此,建议用以下代码段替换get(a[i])
:
#include <conio.h>
#define MAX_SIZE (56-1)
#define ALLOWED_CHAR(c) (32 <= (c) && (c) <= 255)
int j = 0;
while (1)
{
int c = _getch();
if (j < MAX_SIZE && ALLOWED_CHAR(c))
{
a[i][j++] = (char)c;
printf("%c",(char)c);
}
else if (j > 0 && c == '\b')
{
j--;
printf("\b \b");
}
else if (j > 0 && (c == '\r' || c == '\n'))
{
a[i][j] = 0;
break;
}
}
上面的答案是正确的 因为额外的
,您正在执行a[n]=…
,这显然是内存访问冲突
此外,如果用户输入的字符超过55个,您的代码仍将执行另一个内存访问冲突。因此,建议用以下代码段替换get(a[i])
:
#include <conio.h>
#define MAX_SIZE (56-1)
#define ALLOWED_CHAR(c) (32 <= (c) && (c) <= 255)
int j = 0;
while (1)
{
int c = _getch();
if (j < MAX_SIZE && ALLOWED_CHAR(c))
{
a[i][j++] = (char)c;
printf("%c",(char)c);
}
else if (j > 0 && c == '\b')
{
j--;
printf("\b \b");
}
else if (j > 0 && (c == '\r' || c == '\n'))
{
a[i][j] = 0;
break;
}
}
首先,您从不检查任何malloc是否工作。首先,您从不检查任何malloc是否工作,这意味着您正在执行
a[n]=…
,这显然是内存访问冲突。awww。但是很难找到。这意味着您正在执行a[n]=…
,这显然是内存访问冲突。awww。但是很难找到。