C:错误在mallocing并将2D char数组传递给函数之后

时间:2018-04-14 06:57:13

标签: c arrays malloc 2d crush

我不明白下面的代码有什么问题。它应该malloc一个2D char数组[5] [30](称为LENGTH),将它传递给一个函数并用字符串填充它。它的功能很好;我可以毫无问题地从那里打印出来。但我无法打印main()函数中的第一个(如果我尝试,应用程序崩溃)。 有人可以解释一下我做错了吗?

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define LENGTH 5 
void fillArray(char array[][LENGTH]) {
    for (int i = 0; i < 5; i++) {
        strcpy(array[i],"Hi World");
    }
    for (int i = 0; i < 5; i++) {
        printf("%s\n",array[i]);
    }
}

int main() {
    char** array = (char**)malloc(5*sizeof(char*));
    for (int i = 0; i < 5; i++) {
        array[i] = (char*)malloc(LENGTH);
    }
    fillArray(array);
    printf("%s",array[0]);
    getchar();
    return 0;
}

2 个答案:

答案 0 :(得分:0)

main()函数传递双指针array并捕获不正确的2D数组array[][LENGTH],只是说双指针 2D阵列&amp;反之亦然。

fillArray()中的任务使用array of char pointer作为参数,有多少? LENGTH

void fillArray(char *array[LENGTH]) { /* this is okay */
        for (int i = 0; i < 5; i++) {
                strcpy(array[i],"Hi World");/*now in `array[i]` you can store any no of char. */
        }
        for (int i = 0; i < 5; i++) {
                printf("%s\n",array[i]);
        }
}

也不需要施放malloc()一旦完成工作,不要忘记释放动态分配的内存,为每个人调用free()。< / p>

答案 1 :(得分:0)

基本问题是你的函数需要一个二维数组,但这不是你传递给函数的那个​​。

main中,您可以分配一维指针数组。然后,对于每个指针,您分配一个chars的一维数组。 这不是2D数组

因此,您的功能无法达到预期效果,因此您的程序失败。

所以而不是:

char** array = (char**)malloc(5*sizeof(char*));
for (int i = 0; i < 5; i++) {
    array[i] = (char*)malloc(LENGTH);
}

试试这个:

char (*array)[LENGTH] = malloc(5*LENGTH*sizeof(char*));

获得正确的malloc'ed 2D数组。

顺便说一句:

我认为你有一个错误

#define LENGTH 5
               ^
               I guess you want 30 instead of 5