我可能有一个指针问题,但我无法弄清楚是什么问题。
该项目应从文件中读取数字(正常工作),然后将信息添加到动态分配的数组中。
以下是从文件中读取并添加到数组的代码部分: buffer [0]是一个特殊字符,表示下一个输入将用于街道数组。
我已经查看了代码并更改了大约一周的内容,仍然无法弄清楚问题所在。 请注意,第一个插槽运作良好,在第二次重新分配之后,它抛出了“AddStreet”内部的异常,称访问冲突写入位置。 我确信这是我错过或未能理解的非常愚蠢的事情,所以任何帮助都将不胜感激。
输入示例:#20 20 30 20#40 50 40 60
以下是从文件中读取并添加到数组的代码部分: buffer [0]是一个特殊字符,表示下一个输入将用于街道数组。
我已经查看了代码并更改了大约一周的内容,仍然无法弄清楚问题所在。 请注意,第一个插槽运作良好,在第二次重新分配之后,它抛出了“AddStreet”内部的异常,称访问冲突写入位置。 我确信这是我错过或未能理解的非常愚蠢的事情,所以任何帮助都将不胜感激。
输入示例:#20 20 30 20#40 50 40 60
typedef struct street
{
int start[2];
int end[2];
}STREET;
void main()
{
int slength=0;
STREET *streets = NULL;
...
ReadFromFile(&streets, people, buildings);
...
}
void ReadFromFile(STREET **pstreets, PERSON *people, BUILDING *buildings)
{
int slength = 0;
...
if(buffer[0] == stre)
{
slength += 1;
*pstreets = (STREET*) realloc(*pstreets, (slength)*sizeof(STREET));
fscanf(pf, "%d %d %d %d", &a,&b,&c,&d);
*pstreets = AddStreet(&(*pstreets), slength-1,a,b,c,d);
}
...
}
STREET* AddStreet(STREET **streets, int length, int bx, int by, int ex, int ey)
{
if(ValidStreet(bx, by, ex, ey))
{
streets[length]->start[0] = bx;
streets[length]->start[1] = by;
streets[length]->end[0] = ex;
streets[length]->end[1] = ey;
}
else
{
streets[length]->start[0] = ex;
streets[length]->start[1] = ey;
streets[length]->end[0] = bx;
streets[length]->end[1] = by;
}
return *streets;
}
= realloc(
PTR, SIZE);
,因为realloc可能会返回NULL
,这样你就会出现内存泄漏的情况。 - Marco(&(*pstreets)
是完全没有意义的。现在展示一下STREET
的类型声明。由于所有的AddStreet
只是修改一个街道,你可以放弃指向指针和长度参数(也许整个函数都可以)。 - WhozCraigAddStreet
的完整主体。你当前的帖子省略了返回值(而且最好有一个返回)。 - WhozCraig