我有一个“名称”(字符串)字段的有序结构列表(CASE)。我想用参数“name”(string)和“count”(integer)创建一个新的结构体(ARTCOUNT)。试图将数据从一个结构复制到另一个结构时出现分段错误
的Structs:
typedef struct
{
char* name;
char* art;
int rating;
}CASE;
typedef struct
{
char* name;
int count;
}ARTCOUNT;
我会走的CASE阵列,如果“名”的情况下,ARTCOUNT相匹配的名字,我会加1计数,否则我将创建一个新的ARTCOUNT阵列新的名字,并继续走阵列。
我遇到的问题是一个奇怪的分段错误,当我尝试添加到计数名称匹配。
/*all is the array of CASE and pLast points to the last CASE in all*/
void countArt(CASE* all, CASE* pLast)
{
CASE* walker = all;
ARTCOUNT* artAll;
ARTCOUNT* artWalker = artAll;
ARTCOUNT* artLast;
if((artAll = (ARTCOUNT*)malloc(sizeof(ARTCOUNT)*(pLast-all+1))) == NULL)
{
printf("Fatal memory error!\n");
exit(1);
}
artWalker->name = (char*)malloc(sizeof(char)*(100));
strcpy(artWalker->name, walker->name);
artWalker->count = 1;
for(walker = all+1; walker <= pLast; walker++)
{
if (strcmp(walker->name, artWalker->name) == 0)
{
artWalker->count += 1;
}
else
{
artWalker++;
artWalker->name = (char*)malloc(sizeof(char)*(100));
strcpy(artWalker->name, walker->name);
artWalker->count = 1; //if I comment this out, no segmentation fault
}
}
artLast = artWalker;
return;
}
如上代码上面提到的,我设法缩小可能是什么错误行artWalker->count-1;
。如果我注释掉这一行,错误消失。但是,如果我尝试在循环中打印artWalker->名称,我仍然会收到分段错误。我检查过我的内存分配几次,我不认为这是。
任何提示?
嗯..我不认为这会影响我分配artWalker。当我为artAll分配内存时,它是否指向artAll分配的数组? – Huy 2012-04-24 16:22:39
@hyngyn不,'artWalker'在'malloc'调用后仍然会有'artAll'的旧无效值 – ouah 2012-04-24 17:38:05
感谢您的帮助! – Huy 2012-04-24 17:43:36