如何在C中使用malloc函数获取动态数组?

时间:2013-12-26 06:57:48

标签: c arrays

我想在我的程序中使用动态数组。 我使用过malloc函数。在我的系统中,总共有32个继电器。 一次将有12个继电器最大关闭。但在最坏的情况下,它可能是32.

所以我在我的程序中选择了size = 32。因此我需要在测试时每次输入32个值。我想在数组中一次只获取12个值。

这是我的代码..

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

    void main(){

    int  relay_check[]={0},i;
    int *relay_check1;
    const int  size=32;

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

    for(i = 0;i < size ; i++ )
       {
           scanf("%d",&relay_check[i]); 
           /*relay_check[i] is the content of element at index i and &relay_check[i] is the         address of element 
     at index i */
    }
     if (!relay_check) { /* If data == 0 after the call to malloc, allocation failed  for some reason */
    perror("Error allocating memory");
    abort();
    }

    for( i = 1;i < size ; ++i) {
    printf("relay_check [%d]: %d\n", i, relay_check[i]);
    }
    for(i=1;i<9;i++){
        if(i == relay_check[i] )
            printf("0");
        else
            printf("1");
    }

    printf("\n");

    for(i=9;i<17;i++){
        if(i == relay_check[i] )
            printf("0");
        else
            printf("1");
    }

    printf("\n");

    for(i=17;i<25;i++){
        if(i == relay_check[i] )
            printf("0");
        else
            printf("1");
    }

    printf("\n");

    for(i=25;i<33;i++){
        if(i == relay_check[i] )
            printf("0");
        else
            printf("1");
    }
    printf("\n");

    getch();
    }  

那么我需要做些什么改变?

2 个答案:

答案 0 :(得分:0)

int relay_check[]={0};表示您只为一个整数分配空间并将其初始化为0,因此

for(i = 0;i < size ; i++ )
{
   scanf("%d",&relay_check[i]); 
}

这将调用未定义的行为。将relay_check声明为

 int  relay_check[32]={0}; 

还有no need to cast the return value of malloc

答案 1 :(得分:0)

我只想总结你需要改变代码的内容:

  • 在声明relay_check时,您要么给出确切的大小并稍后对其进行初始化,要么明确初始化它而不给出大小。

    * - 确切尺寸:int relay_check[32]

    * - 初始化时不给出尺寸:int relay_check[] = {1 , 45 , 7 , ... , 47} // the whole 32 elements

    * - 或(我认为这是你想要做的)给出确切的大小并将所有元素初始化为0:int relay_check[32] = {0}

  • 有关malloc的错误检查需要在调用后立即进行

  • scanf()添加getchar()之后,它会收到尾随的换行符