我正在制作一个C程序,我必须使用-ansi和-pedantic。我想读取stdin输入但是当我调用getchar()时程序崩溃了。以下是产生错误的行:
var token = "your token"
var url = "https://todoist.com/API/v7/sync";
var data = {
'token' : token,
'resource_types' : '["all"]',
};
jQuery.ajax({
url: url,
data: data,
type: 'GET',
dataType: 'json',
success: function(response) {
console.log(response);
},
error: function(response) {
console.log('error');
},
});
当我正常运行它说
while((data = getchar()) != EOF) {
使用GDB
Calculator: malloc.c:2394: sysmalloc: Assertion `(old_top == initial_top (av) && old_size == 0) || ((unsigned long) (old_size) >= MINSIZE && prev_inuse (old_top) && ((unsigned long) old_end & (pagesize - 1)) == 0)' failed.
Aborted (core dumped)
编辑:
这是我的分配代码
Program received signal SIGABRT, Aborted.
0x00007ffff7a42428 in __GI_raise (sig=sig@entry=6)
at ../sysdeps/unix/sysv/linux/raise.c:54
54 ../sysdeps/unix/sysv/linux/raise.c: No such file or directory
标题:
struct Expression* initParse(int argc, char const *argv[]) {
struct Expression *expr = malloc(sizeof expr);
enum WaitFor next = MinusNext | NumberNext | NewBraquetNext;
testStdin(argc, argv);
if(!expr)
exit(1);
expr->level = 0;
expr->part = 0;
expr->parts = malloc(sizeof expr->parts);
if(!expr->parts)
exit(1);
expr->parts[0] = malloc(sizeof expr->parts[0]);
if(!expr->parts[0])
exit(1);
expr->parts[0][0] = malloc(sizeof expr->parts[0][0]);
if(!expr->parts[0][0])
exit(1);
expr->parts[0][0]->type = MainPartType;
expr->parts[0][0]->priority = 0;
return parse(expr, next, argv[1]);
}
答案 0 :(得分:0)
您粘贴的代码绝对没有任何问题,除了我们要确定究竟是什么导致问题的简短方法。
但是,您所看到的断言几乎可以肯定是由于堆损坏。它是通过分配x
字节然后将x + 42
字节写入该区域而引起的那种事情。这往往会破坏堆中的内存控制信息。
因此,我建议您首先查看代码中的任何内存分配,看看它们是否存在问题。
或者,这是一个想法,发布更多代码,以便我们能够以更实质的方式帮助您: - )
答案 1 :(得分:0)
Finally I found what the problem was. I had something like char *thing = malloc(sizeof thing)
but it has to be like char *thing = malloc(sizeof *thing)