错误,'无效的二进制操作数*(包含长期无符号整数'以及' int *')'

时间:2017-06-26 13:57:54

标签: c

当我试图编译我的程序时,我遇到了一个问题。

错误:

main.c:26:42: error: invalid operands to binary * (have 'long unsigned int' and 'int *')
         array = (int*) malloc(sizeof(int)* size);
                                          ^
main.c:30:50: error: invalid operands to binary * (have 'long unsigned int' and 'int *')
         array = (int*) realloc(array, sizeof(int)* size) ;

以下是相关代码:

int* arraySize(int* array, int* size)
{
    size = 0;
    while ((size > 20) || (size < 1))
    {
        printf("What is the size of your array? (1 - 20)\n");
        scanf("%d", &size);
        if ((size > 20) || (size < 1))
        {
            printf("Invalid selection.\n");
        }
    }
    //checking if array has been allocated before
    if(array = NULL) 
    {
        array = (int*) malloc(sizeof(int)* size);
    }
    else
    {
        array = (int*) realloc(array, sizeof(int)* size) ;
    }
    printf("\nSize of array: array[%d]\nReturning...", size);
    return array;
}

有人可以向我解释发生了什么事吗?

TIA

4 个答案:

答案 0 :(得分:2)

你的参数大小太多了*。这使得size成为int的一个poitner。反过来需要取消引用(*大小而不是简单大小)来使用值指针指向。但我认为这是一个错误,你不想让尺寸成为指针。

更改为:

int* arraySize(int* array, int size)

答案 1 :(得分:0)

您遇到的另一个无关问题:您的if语句将值NULL分配给array。你应该使用双等号。

答案 2 :(得分:0)

看看这一行:

array = (int*) malloc(sizeof(int)* size);

和你的方法签名:

int* arraySize(int* array, int* size)

很清楚你的大小是一个指针,你想根据大小值分配一些内存;但你在这里尝试解决大小地址。所以,它应该如下:

array = (int*) malloc(sizeof(int) * *size);

永远记住,

int *size;
size means address of size and *size means values in that address.

答案 3 :(得分:0)

制作动态数组有什么意义?您不能将数组声明为波纹管或类似的东西吗?

int array[size];