这个程序如何使用C中的malloc函数创建一个二维数组?
这个程序如何使用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; }
这段代码中的问题是关于动态内存分配在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。
,作者建议通过阅读相关资料和书籍,研究源代码和使用静态分析工具来解决关于动态内存分配的问题。