程序出现逻辑错误或同步错误。

问题描述 投票:0回答:1

我正在学习C语言的指针,我试着写了一个这样的程序。

#include <stdio.h>
#include <stdlib.h>

int* getValue(int length)
{
   int *value,*index,data;
   value = malloc(length*sizeof(int));
   index = value;

   while(length>0){
     scanf("%d", &data);
     *index = data;
     index++;
     length--;
   }
   return (value);
}


int total(int length, int *data)
{
   int *index,sum,i;

   index = data;
   sum =0;
   for(i=0;i<length;i++){
       sum+= *index;
       index++;
   }
   return (sum);
}

int main()
{
   int i,j,ptrLength,num,sum,*lengthPtr,*lengthIndex,**ptr,**ptrIndex;

   lengthPtr = malloc(3*sizeof(int));
   lengthIndex = lengthPtr;
   ptr = malloc(3*sizeof(int *));
   ptrIndex = ptr;

   for(i=0;i<3;i++){
     printf("Enter the length and the value:");
     scanf("%d",ptrLength);
     *lengthIndex = ptrLength;
     lengthIndex++;     

     *ptrIndex = getValue(ptrLength);    
     ptrIndex++;
   }

   printf("Enter which one you want to calculate:");
   scanf("%d",&num);

   sum = total(lengthPtr[num-1], ptr[num-1]);
   printf("The sum is %d",sum);

   free(lengthPtr);
   free(ptr);
   return (0);
}

尝试分配两个数组来存放数组的大小和值。这段代码可以编译,但没有显示出我所想的东西(应该打印出其中一个数组的和)。但我不知道我哪部分做错了......。谁能帮帮我?

c pointers
1个回答
1
投票

我在你的代码中做了一些修改,我用运算符在数组(int*)上迭代。subscribt [] (返回对数组中n位置元素的引用),我修正了一些错误。

你必须检查malloc在分配过程中是否成功或失败! 你有内存泄漏,因为你没有释放数组中的 array(int**) 你刚刚释放了指针!

#include <stdio.h>
#include <stdlib.h>

int* getValue(int length)
{
   int *value,*index,data;
   value = malloc(length*sizeof(int));
   if(value==NULL){
      printf("malloc failed!");
       return NULL; 
   }
    for(int i=0 ;i<length; i++){
     scanf("%d", &data);
     value[i]=data;
   }
   return value;
}


int total(int length, int *data)
{
   int sum,i;
   sum =0;
   for(i=0;i<length;i++){
       sum+= data[i];
   }
   return (sum);
}

int main()
{
   int i,num,sum;

   int *Lengths =(int *)malloc(3*sizeof(int));
   if(Lengths==NULL){
       printf("malloc failed!");
       return 1;
   }
   int **Arrays = (int **)malloc(3*sizeof(int *));
   if(Arrays==NULL){
      printf("malloc failed!");
       return 1; 
   }

   for(int i=0;i<3;i++){
     printf("Enter the Array length: ");
     scanf("%d",&Lengths[i]);
     printf("Fill the array with values: ");
     Arrays[i] = getValue(Lengths[i]);    
   }

   printf("Enter which one you want to calculate:");
   scanf("%d",&num);

   sum = total(Lengths[num-1], Arrays[num-1]);
   printf("The sum is %d",sum);

   free(Lengths);
   for(int i=0; i<3;i++)
        free(Arrays[i]);
   free(Arrays);
}

0
投票

唯一的问题是 scanf 你需要把它存储在某个地址。

scanf("%d",&ptrLength);
© www.soinside.com 2019 - 2024. All rights reserved.