В моем коде у меня есть несколько указателей на указатели (например, плавающие ** переменные), и у меня, похоже, возникают проблемы, освобождающие их память, чтобы не вызывать утечки памяти. Вот код, который я написал:C освобождение указателя на указатель
float *one, **part1, **part2;
one = malloc(sizeof(&one) * nx * nx);
part1 = malloc(sizeof(&part1) * nx);
if(one == NULL || part1 == NULL) {
printf("Memory error.\n");
exit(2);
}
for(k = 0; k < nx; k++)
part1[k] = &one[k * nx];
one = malloc(sizeof(&one) * nx * nx);
part2 = malloc(sizeof(&part2) * nx);
if(one == NULL || part2 == NULL) {
printf("Memory error.\n");
exit(2);
}
for(k = 0; k < nx; k++)
part2[k] = &one[k * nx];
... (Other code here)
for(k = 0; k < nx; k++) {
free(part1[k]);
free(part2[k]);
}
free(one);
free(part1);
free(part2);
Этот код проходит через, делает вычисления правильно, но ошибки в свободном цикле. Он работает при k = 0, но затем, пытаясь освободить part1 [1] и part2 [1], он дает мне ошибку «обнаруженный glibc».
Это была моя первая попытка, но она давала мне утечки памяти (т. Е. Через несколько часов повторного цикла, она занимала более 10 ГБ памяти, что слишком велико, когда nx всего 16). – wolfPack88 2010-12-04 19:05:29
@ wolfPack88: Вы рассмотрели возможную утечку, о которой я упоминал выше, т. Е. У вас есть отдельные два отдельных блока «один» и освободить их обоих? – casablanca 2010-12-04 19:07:16