Sid*_*Sid 3 c bus memory-segmentation
当我尝试编译以下C代码时,我得到一个总线错误.我猜它与我称之为memcpy的方式有关,但我无法弄明白.任何帮助将不胜感激!
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char *p = (char*)malloc(sizeof(char)*11);
// Assign some value to p
p = "hello";
char *name = (char*)malloc(sizeof(char)*11);
// Assign some value to name
name = "Bye";
memcpy (p,name,sizeof(char)*10); // Problem begins here
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Ray*_*oal 10
这里p指向你的作业后的字符串文字,而不是你分配的内存!
然后你试着写入那个记忆memcpy.
许多C编译器在只读存储器中分配字符串文字,因此总线错误.
要解决您的问题,您应该将字符h,e,l,l和o 复制到您p在第一行中分配的空间中main使用strncpy.这会一直p指向你自己分配的内存; 后者memcpy会很好(前提是你没有溢出缓冲区).
请注意,通常在直接分配给字符串变量时,您将使变量指向不同的内存地址.在您的代码中,您为几个字符串分配了空间,但是当您将字符串文字分配给变量时,您正在更改它们指向的位置,从而导致内存泄漏.
| 归档时间: |
|
| 查看次数: |
5518 次 |
| 最近记录: |