我必须编写一个函数,在指针数组的末尾添加一个地址。这就是我所做的。我想知道我是否做得对,如果没有,请纠正我。
#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;
}
答案 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;
}