C中字符数组的动态内存分配问题

C中字符数组的动态内存分配问题,c,arrays,malloc,dynamic-programming,dynamic-memory-allocation,C,Arrays,Malloc,Dynamic Programming,Dynamic Memory Allocation,我正试图用c语言编写一个程序,为一个维数为n,m的“char”数组分配内存。下面是我尝试过的,但每次运行它时,无论我给它什么维度,它都会返回-2的值,甚至不会在内存分配中出现打印错误。。 你们觉得怎么样 #include <stdio.h> #include <stdlib.h> int main(void){ int i,j,n,m; char **p; scanf("%d %d",&n,&m); //get a

我正试图用c语言编写一个程序,为一个维数为n,m的“char”数组分配内存。下面是我尝试过的,但每次运行它时,无论我给它什么维度,它都会返回-2的值,甚至不会在内存分配中出现打印错误。。 你们觉得怎么样

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

int main(void){
    int i,j,n,m;
    char **p;
    scanf("%d %d",&n,&m);         //get array dimensions
    p=malloc(n*sizeof(char *));
    if (p==NULL){
        printf("Error in memory allocation.\n");
        return -1;
    }
    for (i=0;i<n;i++){
        p[i]=malloc(m*sizeof(char));
        if (p[i]==NULL)
            printf("Error in memory allocation.\n");
            return -2;
    }
}
谢谢

    if (p[i]==NULL)
        printf("Error in memory allocation.\n");
        return -2;
一定是

    if (p[i]==NULL) {
        printf("Error in memory allocation.\n");
        return -2;
    }

一些编码指南要求始终将{}与if语句放在一起,即使只有一条语句也要放在一起,以避免此类问题。

Typo。在最后一个if之后缺少{},因此返回-2总是在循环的第一次执行。非常正确,已编辑。谢谢我是一个傻瓜你想学习使用调试器一步一步地跟踪代码。这通常会告诉您实际发生了什么。现在您的代码无法编译。在计算机上修复代码并再次运行。在给出答案后不要更改问题,因为这可能会导致无法理解答案。因此,我回滚了您的编辑。通过添加内容更新您的问题。谢谢,伙计,现在我觉得自己很傻