malloc()関数を使用した後にメモリを解放しようとしていますが、それは私には機能しません。free()はC言語では動作しません
//This becomes my header file
char* staticIP;
char* start = NULL;
char* ende = NULL;
char* splitString(char* start, char* ende) {
size_t len = ende-start;
char* result = (char*)malloc(sizeof(char)*(len+1));
strncpy(result,start,len);
result[len] = '\0';
return result;
}
//TO free memory
void freePointer(char* pointer) {
if (pointer != NULL) {
free(pointer);
pointer=NULL;
}
}
//Function uses splitString which does the malloc
void extractIP(char* buffer) {
char* start = strstr(buffer,"IP=")+3;
char* ende = strstr(start,":");
freePointer(staticIP);
staticIP = splitString(start,ende);
}
void setupWifi() {
char* result = WIFI.getIPString();
extractIP(result);
#ifdef DEBUG
USB.print("NEW IP: ");
USB.println(staticIP);
#endif
}
残念ながら、これは私のために働きません、提案/訂正は、私のコードの可能なユースケース
これをいただければ幸いです。
#include<modwifi.h>
void setup() {
setupWifi();
}
このコードは繰り返し、いくつかの時間間隔の後に呼び出され、静的IPは古い静的IPが解放される必要があるたびに更新されますが、機能しません。呼び出しごとにメモリをロギングしようとしましたが、0になるまでメモリは減少し続けます。
これは、大きなファイルから抽出できる意味のあるコードです。
注:ポインタとして宣言されていますが、mallocは使用しないため、開始点と終了点に問題があると考えられます。
あなたはどういう意味ですか?それはどうやってテストしましたか? –
問題のテストケースを表示するか、問題のあるコード全体を投稿してください。 – fluter
ポインタは 'freePointer'で解放した後に' NULL'でなく、 'NULL' ***にローカルに設定しているので、「動作していません」という意味ですか?***その値は呼び出し側に戻ってきません。 –