私は得る
malloc: *** error for object 0x1001012f8: incorrect checksum for freed object
- object was probably modified after being freed.
*** set a breakpoint in malloc_error_break to debug
次の関数のエラー:
char* substr(const char* source, const char* start, const char* end) {
char *path_start, *path_end, *path;
int path_len, needle_len = strlen(start);
path_start = strcasestr(source, start);
if (path_start != NULL) {
path_start += needle_len;
path_end = strcasestr(path_start, end);
path_len = path_end - path_start;
path = malloc(path_len + 1);
strncpy(path, path_start, path_len);
path[path_len] = '\0';
} else {
path = NULL;
}
return path;
}
どうすればこれを機能させることができますか?関数を書き直して、それを使用してメモリを割り当てると、path[path_len + 1]
問題なく動作します。
今、私が理解していない部分はfree
、プログラムが存在するまで、割り当てられたすべてのメモリがプログラムに必要になるため、アプリケーションのどの時点でも呼び出すことさえないということです(とにかく、割り当てられたすべてのメモリを無効にします?!)
では、オブジェクトを解放しないと、解放されたオブジェクトがどのように破損するのでしょうか?
この関数は次のように呼び出されます。
char *read_response(int sock) {
int bytes_read;
char *buf = (char*)malloc(BUF_SIZE);
char *cur_position = buf;
while ((bytes_read = read(sock, cur_position, BUF_SIZE)) > 0) {
cur_position += bytes_read;
buf = realloc(buf, sizeof(buf) + BUF_SIZE);
}
int status = atoi(substr(buf, "HTTP/1.0 ", " "));
がありますが、realloc
使い方が間違っていますか? 完全なサーバー応答を読みたいので、反復ごとに再割り当てする必要がありますよね?