热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ANSIC中实现动态分配二维数组的方法

本文介绍了一种在ANSIC中动态分配二维数组的方法。通过创建指针数组并为每个指针分配连续空间,可以灵活地管理内存。文章还讨论了一些常见的错误和注意事项。

最近有人向我提出了一个问题,需要在ANSI C中实现动态分配二维数组的功能。这个问题的解决方案相对简单,但需要注意一些细节。

基本思路是首先创建一个指针数组,然后为每个指针分配连续的内存空间。具体步骤如下:

1. 定义一个指向指针的指针,例如:char **p

2. 动态分配指针数组,即二维数组的行:p = (char **)calloc(row, sizeof(char *))

3. 为每个指针分配列空间:p[i] = (char *)calloc(col, sizeof(char))

下面是一个示意图,帮助理解这一过程:

ANSI C中的动态分配二维数组

需要注意的是,在测试过程中,直接将字符串赋值给指针(如:p[0] = "1111111111";)会导致段错误,因为这实际上是将指针指向了一个静态字符串,而不是动态分配的内存。正确的做法是使用strcpy函数将数据复制到动态分配的内存中。

以下是完整的代码示例:

#include "dynamic_allocate_array.h"

char **array_new(int row, int col) {
    int i = 0;
    char *ParrayCol = NULL;
    char **ParrayRow = NULL;

    ParrayRow = (char **)calloc(row, sizeof(char *));

    for (i = 0; i 
#include 
#include 

char **array_new(int row, int col);
void array_free(char **p, int row, int col);

#endif

#include "dynamic_allocate_array.h"

int main(void) {
    char **p;
    char *a[2];

    char tab1[] = "1111111111111";
    char tab2[] = "22222222222222222222";
    char tab3[2][100] = {{"111111111111111111111111"}, {"2222222222222222222222222222"}};
    a[0] = tab1;
    a[1] = tab2;

    p = array_new(2, 100);
    strcpy(p[0], tab1);
    strcpy(p[1], tab2);

    printf("%s, strlen = %d\n", p[0], strlen(p[0]));
    printf("%s, strlen = %d\n", p[1], strlen(p[1]));

    p[1][5] = 0;
    array_free(p, 2, 100);

    p = array_new(2, 100);
    strcpy(p[0], tab2);

    return EXIT_SUCCESS;
}

通过上述方法,可以有效地管理和释放动态分配的二维数组内存,避免内存泄漏和其他常见错误。


推荐阅读
author-avatar
手机用户2502859387
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有