在c中使用struct

时间:2017-05-03 09:20:23

标签: c loops

#include <stdio.h>   
struct Bar{
    int max;
    int N;
    int k[4];
    float g[4];
};


typedef struct Bar myStruct;



myStruct entr(){
    myStruct result;
    int i;

    printf("max\n");
    scanf("%d", &result.max);

    printf("N = \n");
    scanf("%d", &result.N);

    printf("\nEnter k = ");
    for(i=1; i<=4; i++) scanf("%d", &result.k[i]);

    printf("\ng = ");
    for(i=1; i<=4; i++) scanf("%f" , &result.g[i]);

    return result;
}


void main() {       
    myStruct entrs=entr();
}

我在linux中运行此代码(使用gcc编译),每次出现以下错误

  

&#34; *堆栈粉碎检测到* :./a.out已终止   中止   &#34;

如何解决此错误?**

1 个答案:

答案 0 :(得分:7)

问题在于边界(超限)。

在你的情况下

  for(i=1; i<=4; i++)

应该是

  for(i=0; i<4; i++)

因为C数组使用基于0的索引。否则,使用您的代码,您就

  • 将索引0处的元素保留为未使用(较小问题)
  • 前往off-by-one,访问超出限制的内存(更大的问题,导致undefined behavior。)

尽管如此,void main()应该是int main(void),以使托管环境符合标准。