如何制作一组结构

时间:2016-06-27 01:11:47

标签: c arrays pointers struct malloc

我对如何制作一个结构数组感到困惑。这是我的代码:

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

typedef struct line
{
   int x;
} *line;

int main()
{
    line *array = malloc(10 * sizeof(line));

    int i = 0;

    for(i; i < 2; i++)
    {

        array[i]->x = 5;
    }

    for(i; i < 2; i++)
    {
        printf("%d\n", array[i]->x);
    }

    return 0;
}

我的困惑来自以下内容:根据我的理解,如果你有一个typedef并为它指定一个名称,例如* line,那么你可以使用 - &gt;访问和改变结构中的每个项目。符号。我似乎没有把它弄好,也不确定为什么。

我的错误:

分段错误(核心转储)

3 个答案:

答案 0 :(得分:5)

typedef line作为指向结构的指针,而不是结构本身。因此,当您malloc - 基于sizeof line编辑时,您可以获得十个指针的空间,而不是十个结构的副本。删除*line之前的typedef,这样就得到了一个结构数组,而不是一个结构的(未分配的)指针数组。然后在索引指针后使用普通的点访问。

如果你真的想要一个指向struct的指针数组,你需要单独分配每个结构,这可能不是你想要的。

答案 1 :(得分:1)

在这里,修复了ya:

function enterPressed(e, field) {
    if (e.keyCode == 13) {
        var tb = document.getElementById("searchbox");
        eval(tb.value);
		if (field.value.length > 0) {
	document.getElementById('searchdisappear').style.display='none';
		}
	}
}

答案 2 :(得分:0)

您几乎拥有它,您只需调整语法或为每个结构分配更多内存:

{
  "path": "somepath",
  "verb": "GET",
  "switches": [
    {
      "name": "id",
      "value":"123"
    },
    {
      "name": "age",
      "value":"24"
    }
  ]
}

在再次使用之前,您也永远不会重置{ "path": "somepath", "verb": "GET", "switches": [ { "name": "id", "value":"123" }, { "name": "age", "value":"25" }, { "name": "foo", "value":"bar" } ] } 数组索引变量。