SS4 SS of 3rd Problem 我想创建一个程序来接受用户的输入,直到他按1。 我正在使用功能使用动态内存分配,并且在运行此代码后,该程序仅接受4个输入,并且不显示任何输出 output
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
void input(int **arr)
{
int n=1,i=0;
*arr=(int *)malloc(sizeof(int));
int ch;
do
{
printf("\nEnter '1' To Enter A Value in array or else enter '0'");
scanf("%d",&ch);
if (ch==1)
{
if (!*arr)
{
printf("\nInsufficient Memory!");
return;
}
printf("\nEnter the value\t:\t");
scanf("%d", arr[i]);
*arr=realloc(*arr,sizeof(int)*(++n));
*arr[++i]=INT_MIN;
}
else if (ch!=1&&ch!=0)
{
printf("\nInvalid input!");
continue;
}
} while(ch!=0);
free(arr);
}
void display(int **arr)
{
for (int i = 0; i < 3; i++)
printf("\n%d", **(arr+i));
free(arr);
}
int main()
{
int *arr;
input(&arr);
display(&arr);
free(arr);
return 0;
}
答案 0 :(得分:1)
使用!*arr[i]
,您正在检查*arr[i]
中包含的逻辑值,该逻辑值在分配值之前可以具有随机值。在您的情况下,*arr[i]
中包含的值为0,从而触发条件!*arr[i]
。
检查realoc()
是否成功的正确方法是检查它的返回值。如果为空,则请求失败。就您而言,它将取代
if(!*arr[i])
作者
if(!*arr)
在*arr[++i]=INT_MIN;
行中,索引[]运算符的优先级高于指针*运算符。您必须写括号:
(*arr)[++i]=INT_MIN;
还有这里
scanf("%d", arr[i]);
您是说arr
是一个数组,当它是指向数组的指针时。您应该将其替换为:
scanf("%d", *arr + i);
在访问数组中的值之前,您还正在执行free()
,这会触发错误。您应该删除free()
和input()
末尾的display()
调用,而只保留main()
末尾的一个。
您仍然需要用
替换显示的printf()
printf("\n%d", (*arr)[i]));