标题可能令人困惑。假设str是一个由malloc分配的指针。ptr,类型为int*,被分配给它并被释放,如下面的代码片段所示:char*str=malloc(64);int*ptr=str;free(ptr);我试图编译上面的代码。它只是给出一个警告:source_file.c:Infunction‘main’:source_file.c:10:16:warning:initializationfromincompatiblepointertypeint*ptr=str;^上面的代码是否调用了未定义的行为?上面的代码片段是否释放了malloc为str分配的内存?
我有一个函数,它接受一个指向char**的指针并用字符串填充它(我猜是一个字符串数组)。*list_of_strings*在函数内部分配内存。char**list_of_strings=NULL;/*list_of_stringsmalloc'dinsidefunction*/fill_strings_with_stuff(&list_ofstrings);use_list_for_something(list_of_strings);/*NowhowdoIfreeitall?*/在我使用了字符串之后,我将如何释放内存?如果我打电话free(list_of_strings);这不是释放
我有一个函数,它接受一个指向char**的指针并用字符串填充它(我猜是一个字符串数组)。*list_of_strings*在函数内部分配内存。char**list_of_strings=NULL;/*list_of_stringsmalloc'dinsidefunction*/fill_strings_with_stuff(&list_ofstrings);use_list_for_something(list_of_strings);/*NowhowdoIfreeitall?*/在我使用了字符串之后,我将如何释放内存?如果我打电话free(list_of_strings);这不是释放
我正在使用一个名为tinyXML的库,它解析XML文件。它的许多方法返回一个constchar*。读完这个问题后:howtoreturnachararrayfromafunctioninC我现在相信,每次方法返回一个char*时,调用者(我)有责任显式释放它,因为它可能在堆上动态分配。我是对/错吗?我可以假设什么?(如果我曾经写过一个库,我宁愿返回std::string而不是char*数组,因为它们对用户来说要简单得多。) 最佳答案 您不能假设任何事情,并且必须检查您正在调用的方法的文档,以了解您是否必须释放指针。有时返回const
我正在使用一个名为tinyXML的库,它解析XML文件。它的许多方法返回一个constchar*。读完这个问题后:howtoreturnachararrayfromafunctioninC我现在相信,每次方法返回一个char*时,调用者(我)有责任显式释放它,因为它可能在堆上动态分配。我是对/错吗?我可以假设什么?(如果我曾经写过一个库,我宁愿返回std::string而不是char*数组,因为它们对用户来说要简单得多。) 最佳答案 您不能假设任何事情,并且必须检查您正在调用的方法的文档,以了解您是否必须释放指针。有时返回const
我正在尝试为char*分配一些内存,如下所示。staticssize_tmemo_write(structfile*filp,constchar__user*buf,size_tcount,loff_t*f_pos){ssize_tretval=-ENOMEM;printk("writefunction\n");if((data=kmalloc(strlen(buf),GFP_KERNEL))==NULL)printk("kmallocfail\n");if(copy_from_user(data,buf,strlen(buf))){retval=-EFAULT;gotoout;}*f
我正在尝试为char*分配一些内存,如下所示。staticssize_tmemo_write(structfile*filp,constchar__user*buf,size_tcount,loff_t*f_pos){ssize_tretval=-ENOMEM;printk("writefunction\n");if((data=kmalloc(strlen(buf),GFP_KERNEL))==NULL)printk("kmallocfail\n");if(copy_from_user(data,buf,strlen(buf))){retval=-EFAULT;gotoout;}*f
当使用字符串文字初始化char*变量时,我应该释放它们吗?对我来说,语法会让我假设它们只是堆栈分配的,但这个例子告诉我,它们不是。#include#includestaticchar*globalBuffer;typedefstructContainer{char*buffer;}Container;Container*Container_new(char*buffer){Container*container=malloc(sizeof(Container));container->buffer=buffer;globalBuffer=buffer;returncontainer;}
当使用字符串文字初始化char*变量时,我应该释放它们吗?对我来说,语法会让我假设它们只是堆栈分配的,但这个例子告诉我,它们不是。#include#includestaticchar*globalBuffer;typedefstructContainer{char*buffer;}Container;Container*Container_new(char*buffer){Container*container=malloc(sizeof(Container));container->buffer=buffer;globalBuffer=buffer;returncontainer;}
#defineHUGE_NUMBER???charstring[HUGE_NUMBER];do_something_with_the_string(string);我想知道在不冒任何潜在内存问题、缓冲区溢出等风险的情况下,我可以添加到char数组的最大数量是多少。我想让用户输入它,并且可能是最大可能的。 最佳答案 查看JackKlein的回复(见originalpost):TheoriginalCstandard(ANSI1989/ISO1990)requiredthatacompilersuccessfullytranslatea