C 奇怪的马洛克崩溃

C 奇怪的马洛克崩溃,c,malloc,C,Malloc,我有以下代码,这些代码在过去几个月一直在工作,但最近开始偶尔崩溃(在多线程应用程序中运行时): 运行它时,“0x7c81bb52”处的指令引用了“0x00000002”处的内存。内存无法“读取” 上面的代码是否有任何明显的错误,在某些情况下可能会导致错误行为?如果我在测试程序中单独运行该函数,它工作正常,但在整个应用程序中运行时总是崩溃。通往第三个马洛克的一切似乎都很好 EDIT:进一步的调查让我相信,是先前对malloc的调用把这个问题搞砸了。这样的事情可能吗?如果我取消注释在set_some

我有以下代码,这些代码在过去几个月一直在工作,但最近开始偶尔崩溃(在多线程应用程序中运行时):

运行它时,“0x7c81bb52”处的指令引用了“0x00000002”处的内存。内存无法“读取”

上面的代码是否有任何明显的错误,在某些情况下可能会导致错误行为?如果我在测试程序中单独运行该函数,它工作正常,但在整个应用程序中运行时总是崩溃。通往第三个马洛克的一切似乎都很好


EDIT:进一步的调查让我相信,是先前对
malloc
的调用把这个问题搞砸了。这样的事情可能吗?如果我取消注释在
set_some_struct
之前进行的函数调用,并且该调用涉及多个
malloc
,那么
set_some_struct
将正常运行。

好吧,分配失败时所做的就是打印一个错误;也许是印刷品掉了,或者你错过了?如果有多个线程运行此操作,则输出可能会令人困惑

其次,您没有检查输入指针。由于崩溃是一次读取,而通过指针进行的所有其他访问都是对新分配区域的写入,因此我怀疑一个或多个参数是
NULL
指针。你应该检查一下

另外,您不应该在C()中强制转换
malloc()
的返回值,如果您没有包含
stdlib.h
,这可能是隐藏错误

如果字符串是常量,则只需调用
malloc()
,首先将三个分配的大小相加,然后相应地设置指针,就可以节省内存和速度

if (some_struct_ptr == NULL)
    printf("malloc failed!\n");
从这一点开始,您将使用垃圾指针。以下代码也会出现同样的问题

if (some_struct_ptr->m_str1 == NULL)
    printf("malloc failed!\n");

if (some_struct_ptr->m_str2 == NULL)
    printf("malloc failed!\n");

如果编译不是问题,但是在mallocsNote之后缺少分号,那么如果初始分配失败(即对于
某些结构ptr
),代码流将保持不变,它只打印一条失败消息。这可能意味着正在取消引用
NULL
指针。从
malloc()
的返回值中删除强制转换,并确保
#include
存在。可能您的程序内存不足。在打印“malloc failed”后执行
abort()
,这样在这种情况下程序就不会继续执行。还要将错误消息打印到stderr,然后调用fflush(stderr)以确保消息被写入。我非常确定我没有丢失输出。如果我在第三次调用malloc之前和之后插入打印,那么之前的打印就会很好地显示出来。包括stdlib.h。不过,用一个malloc就可以完成这一切,这是一个很酷的提示!
if (some_struct_ptr->m_str1 == NULL)
    printf("malloc failed!\n");

if (some_struct_ptr->m_str2 == NULL)
    printf("malloc failed!\n");