当我试图编译我的程序时,我遇到了一个问题。
错误:
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
答案 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];