使用自由函数时,C程序崩溃

时间:2016-06-01 16:34:11

标签: c pointers codeblocks free

首先,抱歉我的英语不好。我不会说话。

我在使用free()函数释放内存时遇到问题,这就是我所拥有的:

Using free() function in C

我在Windows 7上使用了代码块。我使用dinamic内存分配大约3年,这是我第一次遇到这个问题。 有人说这个问题是gcc编译器

equal Directions

方向在功能上是相同的,所以我不认为我试图释放无效的指针

3 个答案:

答案 0 :(得分:1)

您的for循环应该在第二轮分配时使用n而不是m

for (i=0; i < n; i++) // You're using m here: use n
{
    ...
    malloc(m...) // Here m is correct

答案 1 :(得分:0)

代码中的错误是:

  • SELECT t.id `Ticket ID`, a.asset `Asset`, sol.solution `Solution reported`, COUNT(tjou.id) `Journal entry count` FROM tickets t JOIN assets a ON t.asset_id = a.id LEFT JOIN ticket_solutions tsol ON tsol.ticket_id = t.id JOIN solutions sol ON tsol.solution_id = sol.id JOIN ticket_journal tjou ON tjou.ticket_id = t.id WHERE t.deleted IS FALSE AND tjou.system_msg IS FALSE AND DATE(t.close_dt) >= DATE_SUB(NOW(),INTERVAL 1 MONTH) AND DATE(a.labor_w_end_dt) > CURDATE() AND sol.solution != 'Communications Issue' GROUP BY t.id ORDER BY `Journal entry count` ASC 不是检查M == NULL是否成功的有效方法。您应该使用malloc,因为该值已分配给(*M) == NULL,而不是(*M)
  • M ReservarMemoriaMatriz中的循环条件似乎有误。它应该是i<=m
  • 您忘记在i<=n中免费(*M)[n]

更正后的代码:

LiberarMemoriaMatriz

答案 2 :(得分:0)

我一直在逐行看,最后发现了错误:

我喜欢你所说的:

  

释放失败之前分配的内容

我改变的另一件事是分配我使用的内存:

(*M) = (double**)malloc(n * sizeof(double*));

和循环条件i < n,一切正常。