C结构分段错误



输入第二个元素后,它会抛出x。我知道为每个元素分配内存是不合适的,但我想更好地检测错误。我想保存两个我事先不知道大小的字符字段。

typedef struct
{
char *m_Cislo;  
char *m_Jmeno;
} TSEZNAM;
TSEZNAM * readNumbers (int *nr)
{   
char *str = NULL;
size_t  capacity = 0;
TSEZNAM st;
TSEZNAM *res = NULL;
*nr=0;

while ( getline(&str, &capacity, stdin) != -1 )
{
st.m_Jmeno = malloc(sizeof(char)*capacity);
st.m_Cislo = malloc(sizeof(char)*capacity);

sscanf(str,"%s %s", st.m_Cislo, st.m_Jmeno);
TSEZNAM *tmp = (TSEZNAM*) malloc ((*nr+1)*sizeof(*res));
for(int i=0; i < *nr; i++)
tmp[i] = res[i];

free(res);
res=tmp;
res[*nr]=st;
*(nr)++;

}

return res;
}
int main(void)
{
int listNr;
TSEZNAM *list = readNumbers(&listNr);       

}

*(nr)++;语句中的括号实际上实现了(您只是包装nr变量的名称(;因此,该语句的作用是增加指针的值,这将在第二个(和随后的(循环中引起问题,因为它将指向一个无效的位置。这是因为后增量(++(运算符的优先级高于间接(*(运算符。

事实上,启用完整警告后,编译器可能会发现此问题;例如,clang cl给出:

警告:表达式结果未使用[-Wunused值]

要解决此问题,需要将解引用运算符(*(放在括号内,如下所示:(*nr)++

相关内容

  • 没有找到相关文章

最新更新