我正在搞乱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) 对于指针,我对使用char**或char*或*array [n]等的声明和函数参数感到困惑.就像函数采用(*array [n])参数一样,我是否通过它是**型?
我尝试使用右 - 左规则并知道p将是指向char(char**p)的指针,而p是n个指针的数组(*p [n]),但有人说*p [n]和**p基本相同.真的吗?