c - 修改 C 函数内的二维 malloc 数组

标签 c arrays pointers malloc

getTable 获取二维结构数组的内容并复制存储在中的 int 它到。但是,当我尝试从 main 中的 table 读取任何内容时,我在运行时收到 Segmentation failure 错误。

void getTable(char*s1, char*s2, char**table)
{
/*
SKIP SOME STUFF
*/

    table = malloc(sizeof(char*)*(s2Len+1));
    for (i = 0 ; i <= s2Len; i++)
        table[i] = malloc(sizeof(char)*(s1Len+1));
    for (i = 0 ; i <= s2Len; i++)
        for (j = 0 ; j <= s1Len; j++)
            table[i][j] = '0' + tmpTable[i][j].num;

//prints what table points to correctly
    for (i = 0 ; i <= s2Len; i++)
    {
        printf("\n");
        for (j = 0 ; j <= s1Len; j++)
            printf("%2c", table[i][j]);
    }
    printf("\n");
}

int main(void)
{

    char ** table; // for number table

/*
SKIP SOME STUFF
*/

// gives error: Segmentation fault (core dumped)
    getTable(s1,s2,table);
    printf("getTable test\n");
    int i, j;
    //
    for (i = 0 ; i <= strlen(s2); i++)
    {
        printf("\n");
        for (j = 0 ; j <= strlen(s1); j++)
            printf("%c ", table[i][j]);
    }
   return 0;
}

最佳答案

您在子函数(getTable)中修改了局部变量(表),但我不知道您在哪里将其传递回调用者。我认为调用者(主要)仍在查看表的原始值。

如果您将 main 的 table 值初始化为 NULL,并在调用函数后使用 %p table 的值 printf 我认为它仍然会指向 NULL。

关于c - 修改 C 函数内的二维 malloc 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23162571/

相关文章:

c++ - 为什么在执行增量操作之前分配指针值

java - 为什么我收到此错误 : data structures (arrays)?

php - 无法访问通过 PHP 中的 Post 方法发布的数组的值

c - 如果-否则问题

c - 在退出时释放所有堆

c++ - 如何通过组合多个 char 数组来创建 char 数组?

c - C 中的字符串与指针连接

c++ - C++中的迭代器到底是什么?

c++ - 在 C++ 中以原始格式获取剪贴板数据

c - Gtk : get usable area of each monitor (excluding panels)