strdup(null)转储核心。在ubuntu和freeBSD上都试过了。为什么?它不应该返回null吗?char*b=NULL;a=strdup(b);这将在strdup调用时转储核心。 最佳答案 没关系。documentation暗示它的参数必须是字符串,如果它是其他东西,比如空指针,任何人都猜会发生什么。本质上,当将NULL指针传递给strdup时,您会得到未定义的行为。如果您向函数传递您不应该传递的内容,函数产生未定义的行为是很正常的。许多标准C函数,如strcpy、strlen也不接受空指针。
我正在学习LearnCtheHardway在线类(class)。在下面的代码示例中,我不明白为什么需要两次free()调用。我以为只需要调用一次free(),因为只有一个malloc()发生。有人能解释一下为什么我们需要两个吗?如果我注释掉free(who->name);那么valgrind会告诉我我丢失了一block内存,就像这样;LEAKSUMMARY:definitelylost:21bytesin2blocks代码如下:#include#include#include#includestructPerson{char*name;intage;intheight;intweigh
我正在学习LearnCtheHardway在线类(class)。在下面的代码示例中,我不明白为什么需要两次free()调用。我以为只需要调用一次free(),因为只有一个malloc()发生。有人能解释一下为什么我们需要两个吗?如果我注释掉free(who->name);那么valgrind会告诉我我丢失了一block内存,就像这样;LEAKSUMMARY:definitelylost:21bytesin2blocks代码如下:#include#include#include#includestructPerson{char*name;intage;intheight;intweigh
当src字符串以\n结尾时,我收到无效读取错误,当我删除\n时错误消失:#include#include#includeintmain(void){char*txt=strdup("thisisanotsocketterminatedmessage\n");printf("%d:%s\n",strlen(txt),txt);free(txt);return0;}valgrind输出:==18929==HEAPSUMMARY:==18929==inuseatexit:0bytesin0blocks==18929==totalheapusage:2allocs,2frees,84bytes
请帮助我追踪iOS内存泄漏。谢谢!我正在使用xCode4.0.1,我试图激活NSZombie来跟踪内存泄漏,但它似乎不像以前那样工作,xCode3.x我无法找出内存泄漏的来源,正如Instruments指出的那样:泄漏对象->GeneralBlock-32地址->0x4c8600大小->32字节负责图书馆->libsystem_c.dylib负责的框架/调用者->strup在这一点上,我不知道我是否在xCode4中以正确的方式将Instruments与NSZombie一起使用,因为当我单击“i”以获取更多信息时,它没有显示NSZombie选项信息,在左侧选项Leaks下。观察:我的iP
我正在尝试消除一些编译器警告,这些警告说strcpy、sprintf等是不安全的。我明白为什么它们不安全,但我想不出一种修复代码的好方法,以C++风格。这是代码的摘录:extList->names[i]=(char*)malloc(length*sizeof(char));strcpy(extList->names[i],extName);//unsafe//strncpy(extList->names[i],extName,length);//alsounsafe这是消息:C4996:'strcpy':Thisfunctionorvariablemaybeunsafe.Conside
当我使用strdup时在MicrosoftVisualC++中,它警告我:warningC4996:'strdup':ThePOSIXnameforthisitemisdeprecated.Instead,usetheISOC++conformantname:_strdup.Seeonlinehelpfordetails.看来_strdup是正确的。但是当我使用_strdup在GCC(FedoraLinuxOS)中,编译器显示错误:error:‘_strdup’wasnotdeclaredinthisscope使用GCC和Linux,编译器不会显示strdup的任何错误.哪个是正确的-