gpt4 book ai didi

C - 使用结构成员值的段错误

转载 作者:太空宇宙 更新时间:2023-11-04 01:09:09 24 4
gpt4 key购买 nike

我一头扎进了一个段错误,我不确定背后的原因。

短篇小说...我将文件名存储到结构的成员中,然后使用这些成员打开文件以将其数据加载到链表中。当我只有两个文件时,这工作正常,但是当我添加第三个文件时,我在打开第一个文件时遇到段错误。

代码有望更好地说明...

int main(int argc, char* argv[])
{
/* Initalise tennisStore struct */
TennisStoreType *ts;
systemInit(ts);

/* Variables */
ts->stockFile = "stock.csv";
ts->custFile = "customer.csv";
ts->salesFile = "sales.csv";

/* Load data from files */
loadData(ts, ts->custFile, ts->stockFile);

...
}

ts 的结构细节...

typedef struct tennisStore
{
CustomerNodePtr headCust;
unsigned customerCount;
StockNodePtr headStock;
unsigned stockCount;
char *custFile;
char *stockFile;
char *salesFile;
} TennisStoreType;

systemInit() 看起来很无害,但这里有代码以防万一......

void systemInit(TennisStoreType *ts)
{
/* Set ts options to be ready */
ts->headCust = NULL;
ts->headStock = NULL;
ts->customerCount = 0;
ts->stockCount = 0;
}

加载数据()...

void loadData(TennisStoreType* ts, char* customerFile, char* stockFile)
{
/* Load customer data */
addCustNode(ts, customerFile);

/* Load stock data */
addStockNode(ts, stockFile);
}

这里是问题发生的地方......

void addStockNode(TennisStoreType* ts, char* stockFile)
{
/* Variables */
StockNodePtr head, new, current, previous;
unsigned stkLevel;
char *stkTok1, *stkTok2, *stkTok3, *stkTok4;
char buf[BUFSIZ];
float stkPrice;
FILE *stream;

/* Set head */
head = NULL;

/* Open stock file */
stream = fopen(stockFile, "r"); <-- segmentation fault when sales.csv line included
assert(stream);

while (fgets(buf, BUFSIZ, stream))
{
...
}
...
}

如上,当 ts->salesFile = "sales.csv" 行包含在 main 中时,会发生段错误。如果不是,一切都很好(文件打开,我可以从中读取,写入等)。我无法理解其中的原因,所以我恳请您发挥良好的天性和对 C 语言的丰富知识,以找出导致此问题的潜在原因。

谢谢!

最佳答案

ts 未初始化,在 systemInit() 中按原样使用。它应该是 malloc()ed..

关于C - 使用结构成员值的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16497910/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com