我有以下两个(很快就是三个)功能,我遇到的问题是:
如果我输入命令“ADD”,并且“LIST”命令被注释掉它很有用,如果我取消注释“LIST”并运行执行正常的“LIST”命令。但是,如果我取消注释“LIST”并运行“ADD”命令,它将写入文件,但它会崩溃应用程序,从而产生这个奇妙的错误:
*** glibc检测到*** ./server:双重免费或损坏(上):0x0000000001680240 ***
其次是“记忆图”等下的更多东西。
/* Adds whatever follows the word "ADD" to the text file"*/
if (cmd.compare(add) == 0) {
file_ptr = fopen ("file1.txt", "a+");
fprintf(file_ptr, "%d" "%s" "%s" "%s" "%s", r," ", fname, lname, phone);
fprintf(file_ptr, "\n");
fclose(file_ptr);
++r;
}
/* LIST user input */
else if (cmd.compare(list) ==0) {
file_ptr = fopen("file1.txt", "r");
size_t count;
while ((count = fread(buf, 1, sizeof buf, file_ptr)) > 0) {
send(new_s, buf, count, 0);
}
}
fclose(file_ptr);
}
答案 0 :(得分:0)
结束标签问题???也对齐
if (cmd.compare(add) == 0) /* Adds whatever follows the word "ADD" to the text file"*/
{
file_ptr = fopen ("file1.txt", "a+");
fprintf(file_ptr, "%d" "%s" "%s" "%s" "%s", r," ", fname, lname, phone);
fprintf(file_ptr, "\n");
fclose(file_ptr);
++r;
}
else if (cmd.compare(list) ==0) /* LIST user input */
{
file_ptr = fopen("file1.txt", "r");
size_t count;
while ((count = fread(buf, 1, sizeof buf, file_ptr)) > 0)
{
send(new_s, buf, count, 0);
}
fclose(file_ptr);
}
答案 1 :(得分:0)
问题是在添加流程期间调用fclose两次。适当的缩进会有所帮助。