我有这样的代码
int i;
for(i=0; i<n ; i++)
{
....
char* ref_error = "";
if( isSeatAvailable(&tmp, movie_name, seat_number, &ref_error) == 0)
{
printf("available %s\n", seat_number);
}
else
{
logError(ref_error);
}
....
}
如果isSeatAvailable
返回0
,它会完美运行,但会返回-1
并且程序继续执行else语句,变量会崩溃:就像n变为4509408等。
事情是,
如果我重写这样的代码并在if语句之外调用isSeatAvailable
方法,那就完美了!
int i;
for(i=0; i<n ; i++)
{
....
int res = isSeatAvailable(&tmp, movie_name, seat_number, &ref_error);
if( res == 0)
{
printf("available %s\n", seat_number);
}
else
{
logError(ref_error);
}
....
}
这可能会导致什么问题?
这是我正在调用的方法
int isSeatAvailable(hall** halls,char* movie_name,char* seat_no, int ticket_count, char** ref_error)
{
....
sprintf(*ref_error,"Seat %s is not defined at %s.",seat_no,tmp->hall_name);
....
}
答案 0 :(得分:3)
sprintf
调用中的问题 。第一个参数ref_error
来自:
char* ref_error = "";
现在sprintf
尝试使用错误消息覆盖常量""
。奇怪的事情会随之而来!
sprintf
需要一个真正的缓冲区(足够大)来存储消息。不只是一个指针。