首先,抱歉我的英语不好。我不会说话。
我在使用free()函数释放内存时遇到问题,这就是我所拥有的:
我在Windows 7上使用了代码块。我使用dinamic内存分配大约3年,这是我第一次遇到这个问题。 有人说这个问题是gcc编译器
方向在功能上是相同的,所以我不认为我试图释放无效的指针
答案 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
,一切正常。