相关疑难解决方法(0)

Malloc'ing Arrays然后Free'ing他们?

我正在搞乱c我在指针使用和语法区域有一些打嗝.

下面,我(尝试)创建一个指向整数数组的指针数组,然后将每个指针指向一个通过malloc()创建的数组.

创建数组后,然后循环遍历每个单元格,分配一个值.

现在,所有这些似乎都在起作用,但是当使用free()来取回内存时,程序崩溃了.

我注意到如果我在malloc()数组内存然后立即调用它们上的free(),程序执行没有问题.然而,当我malloc(),赋值和THEN调用free()时,将发生崩溃.(分段故障).

下面是有效的代码,malloc()然后立即free()ing

int (*ptrArr[5])[5];

for(int i=0; i<5; i++)
    ptrArr[i] = malloc(sizeof(int) * 5);

for(int i=0; i<5; i++)
    printf("ptrArr[%d][%x]->[%x]\n", i, &ptrArr[i], &*ptrArr[i]);
printf("\n");

for(int i=0; i<5; i++){
    for(int j=0; j<5; j++){
        printf("[%x](%2d) | ", &*ptrArr[i][j], *ptrArr[i][j]);  
    }
    printf("\n");
}

for(int i=4; i>=0; i--)
    free(ptrArr[i]);
Run Code Online (Sandbox Code Playgroud)

上面按照我的预期执行,但是当我为单元格赋值然后尝试自由调用时,会生成一个分段错误:

int (*ptrArr[5])[5];

for(int i=0; i<5; i++)
    ptrArr[i] = malloc(sizeof(int) * 5);

for(int i=0; i<5; i++)
    printf("ptrArr[%d][%x]->[%x]\n", i, &ptrArr[i], &*ptrArr[i]);
printf("\n");

for(int i=0; i<5; i++){
    for(int j=0; j<5; j++){
        printf("[%x](%2d) | ", &*ptrArr[i][j], …
Run Code Online (Sandbox Code Playgroud)

c malloc pointers memory-management segmentation-fault

5
推荐指数
1
解决办法
154
查看次数

C/C++中的指针/数组语法(char**p,*p [n])

对于指针,我对使用char**或char*或*array [n]等的声明和函数参数感到困惑.就像函数采用(*array [n])参数一样,我是否通过它是**型?

我尝试使用右 - 左规则并知道p将是指向char(char**p)的指针,而p是n个指针的数组(*p [n]),但有人说*p [n]和**p基本相同.真的吗?

c pointers

4
推荐指数
2
解决办法
1万
查看次数