C语言 指针数组的动态分配



以下代码给出了分段错误。我不知道为什么。请看..

#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("%dn", *ptr[0] );
    return 0;
}

关于使用 GDB 进行调试,它说:

Program received signal SIGSEGV, Segmentation fault.
0x0804843f in main () at temp.c:10
*ptr = (int *)malloc(10 * sizeof (*val));

感谢有关此事的任何帮助。

int **ptr; 
*ptr = (int *)malloc(10 * sizeof (*val));

第一条语句声明双指针。
第二个取消引用指针。为了能够取消引用它,指针应指向某个有效内存。因此,它不会造成赛格的过错。

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

ptr = malloc(sizeof(int *) * 10); 

现在ptr指向一个足够大的内存,可以容纳10指向int的指针。
现在可以使用ptr[i]访问每个本身是指针的数组元素,其中,

i < 10
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
    int **ptr;
    int x;
    x = 5;
    ptr = malloc(sizeof(int *) * 10);
    ptr[0] = &x;
    /* etc */
    printf("%dn", *ptr[0]);
    free(ptr);
    return 0;
}

请参阅下面的程序,也许,它有助于更好地理解。

#include<stdio.h>
#include <stdlib.h>
int main(){
/* Single Dimention */
int *sdimen,i;
sdimen = malloc ( 10 * sizeof (int));
/* Access elements like single diminution. */
sdimen[0] = 10;
sdimen[1] = 20;
printf ("n.. %d... %d ", sdimen[0], sdimen[1]);
/* Two dimention ie: **Array of pointers.**  */
int **twodimen;
twodimen = malloc ( sizeof ( int *) * 10);
for (i=0; i<10; i++) {
  twodimen[i] = malloc (sizeof(int) * 5);
}
/* Access array of pointers */
twodimen[0][0] = 10;
twodimen[0][3] = 30;
twodimen[2][3] = 50;
printf ("n %d ... %d.... %d ", twodimen[0][0], twodimen[0][3], twodimen[2][3]);
return 0;
}

希望这有帮助.. ;).

从概念上讲,如果您使用的是**ptr,那么您需要为ptr和*ptr分配内存以defrence **ptr。

但是在您的情况下,您只对 *ptr 进行同种异体内存,如果您的编译器足够智能它的PTR(一个指针位置)的同种异体存储器来链接*PTR,因此它可以链接PTR->PTR->*PTR。因此,您不会得到赛格错误。

include

包括

int main()    
{    
    int **ptr;    
    int *val;    
    int x = 7;    
    val = &x;    
    ptr = (int**)malloc(sizeof(int**));    
    *ptr = (int *)malloc(10 * sizeof (*val));    
    *ptr[0] = *val;    
    printf("%dn", *ptr[0] );    
    return 0;    
}

上面会起作用。您可以找到差异并了解原因。

底线您取消引用**ptr而不为其分配内存。

相关内容

  • 没有找到相关文章

最新更新