我有以下代码在过去几个月一直在工作,但最近有时开始崩溃(在多线程应用程序中运行时):
struct some_struct {
char* m_str1;
char* m_str2;
}
struct some_struct*
set_some_struct(const char* p_str1, const char* p_str2) {
struct some_struct* some_struct_ptr =
(struct some_struct*)malloc(sizeof(struct some_struct));
if (some_struct_ptr == NULL)
printf("malloc failed!\n");
size_t str1_len = strlen(p_str1) + 1;
size_t str2_len = strlen(p_str2) + 1;
some_struct_ptr->m_str1 = malloc(str1_len);
if (some_struct_ptr->m_str1 == NULL)
printf("malloc failed!\n");
some_struct_ptr->m_str2 = malloc(str2_len); // Crashes here
if (some_struct_ptr->m_str2 == NULL)
printf("malloc failed!\n");
strcpy(some_struct_ptr->m_str1, p_str1);
strcpy(some_struct_ptr->m_str2, p_str2);
return some_struct_ptr;
}
运行它会给我““0x7c81bb52”处的指令引用“0x00000002”处的内存。无法“读取”内存。”
上面的代码有什么明显的错误,在某些情况下可能会出现异常吗?如果我在测试程序中单独运行该函数,它工作得很好,但在完整的应用程序中运行时它总是崩溃。通往第三个 malloc 的一切似乎都很好。
编辑:进一步的调查让我相信,这是早些时候的电话,把malloc
这个弄得一团糟。这样的事情甚至可能吗?如果我取消注释之前进行的函数调用set_some_struct
并且涉及多个函数调用,mallocs
那么set_some_struct
它将运行得很好。