我有以下使用strdup函数的代码
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
char source[] = "The Source String ";
int main()
{
char *dest;
if ((dest = _strdup(source)) == NULL)
{
fprintf(stderr, " Error allocation memory. ");
exit(1);
}
printf("The destination = %s\n", dest);
return 0;
}它成功地说出了Source String,但我感兴趣的是它在哪种情况下失败了,以及它在日常问题中的使用情况如何?
char *strdup (const char *s)
{
char *d = malloc (strlen (s) + 1); // Space for length plus nul
if (d == NULL) return NULL; // No memory
strcpy (d,s); // Copy the characters
return d; // Return the new string
}如果我们的字符串不是空的,有没有可能导致strdup函数失败?
发布于 2012-03-29 22:45:46
如果malloc分配内存失败并返回NULL,则返回是。
当您试图复制一个非常大的字符串时,或者如果您的地址空间非常零碎并且几乎已满(因此malloc找不到连续的内存块来分配,或者在没有多少可用内存的嵌入式系统中),可能会出现这种情况。
发布于 2012-03-29 22:47:30
strdup失败的机会由malloc失败的机会决定。在具有虚拟内存的现代操作系统上,malloc故障是非常罕见的事情。在系统内存不足到malloc必须返回NULL之前,操作系统甚至可能已经杀死了整个进程。
发布于 2012-03-29 22:59:05
如果有内存泄漏,内存耗尽的情况并不是没有听说过。因此,检查null,打印出错误消息,甚至在这一点上退出,这不是一个坏主意。请注意,如果内存用完,像'printf‘这样的东西就不能工作(或者可能不能工作,但根据我的经验是不能工作的)。所以你必须使用低级的'write‘或者类似的东西,并且你正在使用的文件描述符(如果你正在写日志文件)应该已经打开了。
https://stackoverflow.com/questions/9927747
复制相似问题