【发布时间】:2016-03-30 18:24:27
【问题描述】:
#include <stdio.h>
#include<stdlib.h>
void *mymemmove(const char *str1,const char* str2,int n)
{
char *tmp = (char*)malloc(sizeof(char)*n);
memcpy(tmp,str2,n);
memcpy(str1,tmp,n);
free(tmp);
return NULL;
}
int main(void) {
// your code goes here
char *p1,*p2,*p3,*p4;
//p1= (char *)malloc(sizeof(char)*30);
p1="ankitagrawal";
p2=p1+2;
char *tmp = (char*)malloc(sizeof(char)*13);
memcpy(tmp,p1,13);
memcpy(p2,tmp,13);
printf("p1 = %s /n p2= %s tmp =%s",p1,p2,tmp);
//mymemmove(p2,p1,13);
//printf("p1 = %s /n p2= %s",p1,p2);
return 0;
}
我的代码在 main 函数的第二个 memcpy 中崩溃。谁能告诉我代码有什么问题?
【问题讨论】:
-
p2指向一个文字字符串,该字符串是无法修改的内存。所以memcpy(p2,tmp,13)是未定义的行为。见stackoverflow.com/q/164194/12711 -
即使合法,将 13 个字节复制到
p1+2;写入超出其界限。 -
字符串常量通常放在受保护的内存中。您不能像这段代码那样尝试修改它们。
-
由于多个严重的错误而崩溃。
-
以
char p1[200] = "ankitagrawal";开头
标签: c debugging crash runtime-error memcpy