分段错误 - C语言 - 结构和For循环

时间:2015-01-18 22:06:52

标签: c segmentation-fault

当我运行以下内容时,我遇到了分段错误: printf仅用于测试结果,因为我想获取此信息并将其添加到另一个数组中。

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

struct proion
{
    char onoma[30];
    float timi;
    int stock;  
};

int main()
{   
int i;
    for (i=0;i<=200;i++)
    {
        struct proion proion[i];
        strcpy (proion[i].onoma,"test");
        proion[i].timi=5;
        proion[i].stock=10;

        printf("%s\n%.2f\n%d\n",proion[i].onoma, proion[i].timi,proion[i].stock);
    }
return 0;
}

2 个答案:

答案 0 :(得分:3)

分配内存在for循环中,您将为Proion创建一个数组。 第一个循环是:

struct proion proion[0];

因此,当您访问proion[i]时,您会收到分段错误,因为没有为该变量分配内存。

对于其他循环也是如此,因为您访问数组的第i个元素,但只有0 to i-1个元素。

然而,这种方法是错误的。好像你正在尝试创建200个结构。在这种情况下,只需在循环外创建数组,或使用malloc动态分配内存。

答案 1 :(得分:2)

你可能想说:

struct proion proion[200];

for (i = 0; i < 200; i++)
{
    strcpy(proion[i].onoma, "test");

目前,您每次都要创建一个新数组,例如当i == 5时,它就像你在说:

struct proion proion[5];
strcpy (proion[5].onoma,"test");

将写入刚刚结束数组的结构(导致分段错误)。当然,整个数组在每次循环后都会丢弃。

另请注意,在更正后的版本中,如果我们正在使用大小为200的数组,我们会说i < 200,而不是i <= 200