我的计划的第一步失败了。首先,我需要从文件读取结构数组。我没有做到这一点 - 我得到了很多错误,我感觉我的阅读语法不正确一旦我这样做,我将能够继续我的程序。我认为我必须使用calloc / realloc / free以及所有这些奇怪的东西,因为我的数据文件可能有很长的数字集。
我的数据文件:
4 5 5 6
9
5 7 6 9
6 5
1 8 1 2 3 6 5
1 9
4 5 5 6
9
5 7 6 9
6 5
1 8 1 2 3 6 5
1 9
它必须像坐标(x; y)一样被读取 - 无论这些数字是如何放置的 - 我可以/必须跳转和阅读
答案 0 :(得分:1)
您对calloc
的使用不正确。正如Herman在他的评论中所说,调用calloc
会返回指向内存块sizeof(struct Trikampiai)
字节长的指针;您将指针存储在int中。此外,您永远不会使用字符数组buf
。
如果您想要动态分配内存,请尝试:struct Trikampiai *Trikamp = calloc(1, dydis);
,或者如果您想自动分配,请点击struct Trikampiai Trikamp;
。从我的内容可以告诉您的程序的意图,你混淆这两个内存分配的概念(堆栈与堆)。这是一个很好的资源:What and where are the stack and heap?
即
Trikamp->xas = sk;
vs Trikamp.xas = sk
使用前者,您必须使用->
运算符访问结构,而后者需要.
运算符,这是我认为您想要的。
您还看到了哪些其他错误?
答案 1 :(得分:1)
您需要长度和计数指数。两者都可以在开始时设置为零。在循环中,如果length等于计数索引,则将长度增加一些合理的量,不要太小,不要太大,并使用增加的长度在trikamp数组上调用realloc
if(count==length) {
length += delta;
trikamp = (struct Trikampiai *)realloc(trikamp, dydis*length);
}
您可以访问结构字段(trikamp+count)->xas
或等同于trikamp[count].xas
,编译器将两者视为相同。