为什么没用指针,数组够大而发生了写入位置访问冲突?

写了一个从文件中一行行读取路线信息存为图的有向边的函数,在使用fgets那行发生了访问冲突,不明白为什么,oneLine数组应该是足够大的.因为是循环使用不知道怎么看到底是哪一次的fgets出了问题,求指点!
```void ReadRoutes(const char*fname, MGraph &G) {
FILE fp = NULL; int ArcNum = 0;
fopen_s(&fp, fname, "r");//打开文件
if (fp == NULL) { cout << "Can not read routees."; }
const char c = ','; char oneLine[2500] = { 0 };//oneLine用于暂时存放一行字符
while (fgets(oneLine, 2500, fp)) {
*_//此行显示写入位置发生访问冲突_**
char startCT[50] = { 0 }; char destCT[50] = { 0 }; char Transport[10] = { 0 };
char Hour[10] = { 0 }; char cost[10] = { 0 }; char Inf[1200] = { 0 };
int i = 0;
for (int j = 0;oneLine[i] != c;i++, j++) { startCT[j] = oneLine[i]; startCT[j + 1] = '\0'; }//起始城市
i++;
for (int j = 0;oneLine[i] != c;i++, j++) { destCT[j] = oneLine[i]; destCT[j + 1] = '\0'; }//目的地城市
i++;
for (int j = 0;oneLine[i] != c;i++, j++) { Transport[j] = oneLine[i]; Transport[j + 1] = '\0'; }//交通工具
i++;
for (int j = 0;oneLine[i] != c;i++, j++) { Hour[j] = oneLine[i]; Hour[j + 1] = '\0'; }//时长
i++;
for (int j = 0;oneLine[i] != c;i++, j++) { cost[j] = oneLine[i]; cost[j + 1] = '\0'; }//票价
i++;
for (int j = 0;oneLine[i] != '\n';i++, j++) { Inf[j] = oneLine[i]; Inf[j + 1] = '\0'; }//网址信息
Mark tem1; strcpy_s(tem1.m_cities, startCT); Mark tem2; strcpy_s(tem2.m_cities, destCT);

    int x = LocateVex(G, tem1);  int y = LocateVex(G, tem2);
    if (x > -1 && y > -1) {
        strcpy_s(G.arcs[x][y].trans, Transport);  strcpy_s(G.arcs[x][y].info, Inf);
        G.arcs[x][y].SpendHour = atof(Hour);  G.arcs[x][y].Cost = atof(cost);
        ArcNum++;
    }
    for (int n = 0;oneLine[n] !=' ' ;n++) { oneLine[n] = ' '; };//置空oneLine用于读取下一行
}
fclose(fp);

}

原因在于没有给指针分配空间,还有就是使用了已经删除了的指针