C 不允许输入的动态分配矩阵

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 **

程序只需从键盘填充一个动态分配的矩阵。 我必须补充一点,我包括在内。我正在研究C++编译器,因此我必须把MCAL添加到MaloC中。在到达gets(一个[i])命令时,它似乎有以下错误:“ConsoleApplication42.exe中0x0F92FB53(msvcr120d.dll)处的未处理异常:0xC0000005:访问冲突读取位置0xCDCDCDCD。”。 在调试之后,它似乎在自由序列上也有一个非常恰当的问题

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。但是很难找到。