将地址添加到指针数组C中

时间:2015-08-30 07:58:39

标签: c arrays pointers pointer-address

我必须编写一个函数,在指针数组的末尾添加一个地址。这就是我所做的。我想知道我是否做得对,如果没有,请纠正我。

#include <stdio.h>
#include <stdlib.h>
#define MAX 3

void add( int *array[MAX], int *addr)
{
    array = realloc(array, 1*sizeof(int));
    array[MAX+1] = addr;
}

int main()
{
    int *addr = 4;
    int *array[MAX] = {"1","2","3"};
    add(array, addr);
    int i;
    for(i = 0; i<4;i++)
        printf("%d ", array[i]);

    return 0;
}

1 个答案:

答案 0 :(得分:1)

来自手册:

  

realloc()函数改变指向的内存块的大小   通过ptr来调整字节大小。内容将在以下范围内保持不变   该区域的起点可达到新旧尺寸的最小值。如果   新尺寸大于旧尺寸,增加的内存不会   初始化。如果ptr为NULL,则调用等效于   malloc(size),适用于所有大小值;如果size等于零,和   ptr不是NULL,那么调用相当于free(ptr)。除非ptr   为NULL,它必须由之前调用malloc()返回,   calloc()或realloc()。如果指向的区域被移动,则免费(ptr)   完了。

如果太长时间阅读生病解释。

首先,你应该在分配内存后使用realloc(例如使用malloc)而不是在本地声明之后

第二,你正在处理指向int(int *)的指针,好像它们是我们的int。也显示为警告

的示例:

int *addr = 4; 
int *array[MAX] = {"1","2","3"}; 
array = realloc(array, 1*sizeof(int));     // here you're using sizeof( int )

另一个问题是超出数组的范围

 array[MAX+1] = addr;

对于有3个空格的数组 - 你有数组[0],数组[1]和数组[2]。

在这一行中你试图到达阵列的数组[4](大概是4) - &gt;超出范围

我建议的代码是:

代码编辑

#include <stdio.h>
#include <stdlib.h>
#define MAX 3

void add( int **array[ MAX ], int *addr )
{
    *array = realloc( *array, ( MAX + 1 ) * sizeof( int* ) );
    (*array)[ MAX ] = addr;
}

int main()
{
    int i;
    int *addr;
    int **array;

    addr = &i;
    array = malloc( MAX * sizeof ( int* ) );
    for ( i = 1; i <= MAX; i++ ) {
        array[ i - 1 ] = addr + 4 * i;
    }

    add( &array, addr );

    for ( i = 0; i < MAX + 1; i++ ) {
        printf( "%p ", array[ i ] );
    }

    return 0;
}