Malloc是否尝试寻址0x0?
我正在用C语言处理动态内存。我正在编写一个小函数,它应该Malloc是否尝试寻址0x0?,c,segmentation-fault,C,Segmentation Fault,我正在用C语言处理动态内存。我正在编写一个小函数,它应该 以字符串(char*)作为参数 使用malloc为该字符串分配内存,并将其复制到内存中;及 返回新分配的字符串 我的程序出现了一个分段错误 char *new_line(char *line) { char *temp_line; int line_len = strlen(line)+1; temp_line = malloc(line_len * sizeof(char));
char *new_line(char *line) {
char *temp_line;
int line_len = strlen(line)+1;
temp_line = malloc(line_len * sizeof(char));
printf(temp_line);
strncpy(temp_line,line,line_len);
return temp_line;
}
根据GDB,我的程序在这个函数上失败了,因为它显然试图对地址0x0做些什么(?)。
GDB是这么说的:
#0 0x00007ffff7b7c3c1 in __strlen_sse2_pminub () from /lib64/libc.so.6
#1 0x00000000004008fc in new_line (line=0x0) at myfile.c:35
根据我的函数,有人能提供一些关于为什么malloc似乎返回或处理0x0的见解吗?我看不见。
printf
在内部使用strlen
您在malloc
的缓冲区上调用printf
,该缓冲区中[可能]包含随机字符[它不会初始化字节]。因此,strlen
可能只是“继续”
将
printf
移动到strncpyprintf
内部使用strlen
之后
#0 0x00007ffff7b7c3c1 in __strlen_sse2_pminub () from /lib64/libc.so.6
您在malloc
的缓冲区上调用printf
,该缓冲区中[可能]包含随机字符[它不会初始化字节]。因此,strlen
可能只是“继续”
将printf
移动到strncpy
#0 0x00007ffff7b7c3c1 in __strlen_sse2_pminub () from /lib64/libc.so.6
崩溃的是strlen,而不是malloc
#1 0x00000000004008fc in new_line (line=0x0) at myfile.c:35
注意,上面写着line=0x0
。这意味着行
为空。调用new\u line
的代码正在传递一个空指针
int line_len = strlen(line)+1;
这反过来会导致strlen
被赋予一个空指针
int line_len = strlen(line)+1;
崩溃的是strlen,而不是malloc
#1 0x00000000004008fc in new_line (line=0x0) at myfile.c:35
注意,上面写着line=0x0
。这意味着行
为空。调用new\u line
的代码正在传递一个空指针
int line_len = strlen(line)+1;
这反过来会导致strlen被赋予一个空指针。存在以下问题
int line_len = strlen(line)+1;
主要问题是,在将数据复制到新字符串之前,要先打印新字符串。分配的内存将有一些随机数据
最好检查内存分配是否成功。还要检查输入指针
strncpy()
不会将'\0'
放在末尾。你需要明确地说出来。因为在这种情况下,您已经通过检查输入字符串的大小来分配内存,所以可以调用strcpy()
有以下问题
主要问题是,在将数据复制到新字符串之前,要先打印新字符串。分配的内存将有一些随机数据
最好检查内存分配是否成功。还要检查输入指针
strncpy()
不会将'\0'
放在末尾。你需要明确地说出来。因为在这种情况下,您已经通过检查输入字符串的大小来分配内存,所以可以调用strcpy()
请发一封信,嗯?堆栈跟踪向我显示strlen not malloc正在寻址0x0。错误消息显示(line=0x0)
,这意味着您向函数传递了NULL
指针。您是否将NULL指针(0x0)或有效字符串传递到new_line()
?您可以使用strdup来完成此操作(尽管不是很方便).请发个帖子,嗯?堆栈跟踪向我显示strlen not malloc正在寻址0x0。错误消息显示(line=0x0)
,这意味着您向函数传递了NULL
指针。您是否将NULL指针(0x0)或有效字符串传递到new_line()
?您可以使用strdup来完成此操作(尽管不是很方便)。