//char char **p; declared in .h file
size_t bs = 5;
size_t Size = sizeof(obj);
p = (char**)malloc(bs);
for (size_t i = 0; i < bs;i++){p[i] = (char*)malloc(Size);}
for (size_t j = 0; j < bs-1; j ++){p[j] = &(p[j + 1][0]); }
for (size_t i = 0; i < bs; i++){free(p[i]);}
free(p);
мой код зависает при попытке освободить последний элемент p в цикле for. Кто-нибудь, что я могу делать неправильно?
РЕДАКТИРОВАТЬ: у меня все еще есть та же проблема, даже когда я меняю ее на (char*)malloc(bs sizeof(char *));
это все еще не работает:
size_t bs = 5;
size_t Size = sizeof(obj);
p = (char**)malloc(bs* sizeof(char *));
for (size_t i = 0; i < bs;i++){p[i] = (char*)malloc(Size);}
for (size_t j = 0; j < bs-1; j ++){p[j] = &(p[j + 1][0]); }
for (size_t i = 0; i < bs; i++){free(p[i]);}
free(p);
использование new вместо malloc также не решает проблему
Однако этот код отлично освобождает память.
size_t bs = 5;
size_t Size = sizeof(obj);
p = (char**)malloc(bs* sizeof(char *));
for (size_t i = 0; i < bs;i++){p[i] = (char*)malloc(Size);}
for (size_t i = 0; i < bs; i++){free(p[i]);}
free(p);
так что проблема, кажется, что-то с этим фрагментом кода
for(size_t j = 0; j < bs-1; j ++){p[j] = &(p[j + 1][0]); }
Я хочу, чтобы это был неявный связанный список, кто-нибудь знает, что я делаю неправильно?
malloc
? - person Ed Heal   schedule 25.01.2014&(pool[j + 1][0])
точно такое же, какpool[j + 1]
? - person Ben Voigt   schedule 25.01.2014for
; это похоже на функцию С++ для меня. (это было добавлено в более поздних версиях C? - person Ben Voigt   schedule 25.01.2014malloc
. Но в C++ вам нужно это сделать. - person pzaenger   schedule 25.01.2014malloc
- person Ed Heal   schedule 25.01.2014malloc
, поэтому я написал это :) - person pzaenger   schedule 25.01.2014malloc
, если вы передаете что-то в API, для которого требуются данные malloc (потому что он будет использоватьfree
). Программисты на C++ должны знать основы использованияstd::malloc
- person Ben Voigt   schedule 25.01.2014