0

I don't know why I am getting warnings for the following code.

#include<stdio.h>
#include<malloc.h>
int main()
{
    int **p;
    int i,j;
    for(i=0;i<5;i++)
    {
        if(i==0)
            p=(int*)malloc(1*sizeof(int));
        else
            p=(int*)realloc(p,(i+1)*sizeof(int));
        p[i]=(int*)malloc(5*sizeof(int));

        for(j=0;j<5;j++)
        {
           p[i][j]=j;
        }
    }
    for(i=0;i<5;i++)
    {
        for(j=0;j<5;j++)
            printf("%5d",p[i][j]);
        printf("\n");
    }

    return 0;
}  

Is there any other way to allocate memory dynamically for a double pointer.

4

3 回答 3

3

您会收到警告,因为 p 是 anint **并且您正在分配内存,就好像它int *在您的if..else行中一样。只需按如下方式替换您的行:

p=(int **)malloc(1*sizeof(int *));

p=(int **)realloc(p,(i+1)*sizeof(int *));
于 2013-08-30T02:27:14.710 回答
0

这编译没有警告

  int **p;
  p = (int **) malloc(sizeof(void *));
于 2013-08-30T02:29:36.213 回答
0

您收到警告是因为您 (a) 将malloc()and的返回值转换为realloc()(b) 将其转换为错误的 type。在 C 中,通常认为最好不要转换malloc()and的返回值realloc(),因为void*它会自动转换为任何其他指针类型,并且放入不必要的转换可能会导致错误(例如你的错误)。

于 2013-08-30T03:08:05.630 回答