动态分配指针数组

Viv*_*thi 5 c malloc pointers segmentation-fault

以下代码给出了分段错误.我无法弄清楚为什么.请参阅..

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int **ptr;
    int *val;
    int x = 7;
    val = &x;
    *ptr = (int *)malloc(10 * sizeof (*val));
    *ptr[0] = *val;
    printf("%d\n", *ptr[0] );

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

在使用gdb进行调试时,它说:

Program received signal SIGSEGV, Segmentation fault.

0x0804843f in main () at temp.c:10

*ptr = (int *)malloc(10 * sizeof (*val));
Run Code Online (Sandbox Code Playgroud)

任何有关此事的帮助表示赞赏.

Alo*_*ave 9

int **ptr; 
*ptr = (int *)malloc(10 * sizeof (*val));
Run Code Online (Sandbox Code Playgroud)

第一个语句声明了一个双指针.
第二次取消引用指针.为了能够取消引用它,指针应该指向一些有效的内存.因此不会出现seg错误.

如果需要为指针数组分配足够的内存,则需要:

ptr = malloc(sizeof(int *) * 10); 
Run Code Online (Sandbox Code Playgroud)

现在ptr指向一个足以容纳10指针的内存int.
现在可以使用ptr[i]where 访问每个自身为指针的数组元素,

i < 10
Run Code Online (Sandbox Code Playgroud)