我想在我的程序中使用动态数组。
我使用过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();
}
那么我需要做些什么改变?
答案 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};
答案 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()
之后,它会收到尾随的换行符