这个程序如何使用C中的malloc函数创建一个二维数组?

7 浏览
0 Comments

这个程序如何使用C中的malloc函数创建一个二维数组?

这个程序的作用是初始化一个二维数组,将数据存储在其中,然后计算所有元素的和。\n这段代码中的动态内存分配让我感到困惑。\n这种方法对我来说是新的,因为我找不到任何能解释这段代码的资源。\n

#include 
#include 
#define col 5
int main(){
    int n, i, j, sum =0;
    int (*a) [col];
    printf("Enter number of rows: ");
    scanf("%d", &n);
    a = (int (*)[col])malloc(n * col * sizeof(int));
    for(i = 0; i < n; i++){
        for (j=0; j < col ; ++j){
            //pointer to 5 elements row
            scanf("%d", &a[i][j]);
            sum+= a[i][j];
        }
    }
    printf("Sum : %d\n",sum);
    free(a);
    return 0;
}

0
0 Comments

这段代码中的问题是关于动态内存分配在C中的工作原理。作者建议先阅读有关C的书籍和参考资料,包括现代C、C参考文档和C17标准草案。此外,还建议阅读有关调用栈、自动变量和C动态内存分配的更多信息。

为了解决这个问题,作者建议研究GNU libc的源代码,该库实现了malloc函数。还建议阅读操作系统教材,以了解malloc在普通操作系统上的工作原理,与虚拟地址空间有关。此外,还建议阅读C编译器的文档,并启用所有警告和调试信息,以及调试器的文档,逐步在调试器下运行程序。

此外,作者还指出代码中存在问题,即malloc和scanf可能失败,但没有进行检查。最后,建议从现有的用C编写的开源软件中获取灵感,如GNU bash、GNU bison、GPP和GTK。

此外,文章还提到C和C++是不同的编程语言,因此对于C++的问题,需要首先阅读一本好的C++编程书籍,并参考C++的相关资料。并且作者建议使用静态源代码分析工具,如Frama-C、Clang静态分析器和Bismon。

,作者建议通过阅读相关资料和书籍,研究源代码和使用静态分析工具来解决关于动态内存分配的问题。

0