memcpy 和 free 后的分段错误
segmentation fault after memcpy and free
我是一名新的 C 程序员。我尝试从静态数组中删除一个元素并将其余元素复制到动态数组中。该程序运行良好,但在 free()
之后出现分段错误。我认为指针 temp
指向堆栈上的一些内存,这就是我出现分段错误的原因(因为我试图释放一些东西,这不是由 malloc 创建的)。但是问题 memcpy 应该从堆栈复制到堆,以便 temp
保持指向堆。这是代码:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv) {
char name [6]={'a','m', 'i', 'n','f','e'};
char *temp= (char *) malloc(sizeof(char)*5);
memcpy(temp,name1,4);
memcpy(temp+4,name1+5,1);
int i;
for (i=0; i<5; i++) {
printf("%c\n",*temp);
temp++;
}
free(temp);
}
程序的输出是:胺
使用
free(temp-i)
你在循环中增加温度。因此,您没有释放您创建的指针。
更好的方法是
for(i=0;i<5;i++){
printf("%c\n",*(temp+i));
}
free(temp);
char name [6]={'a','m', 'i', 'n','f','e'};
注意这不是 C 的字符串,因为没有终止字符串字符 '\0'(所以它只是一个字符数组而不是字符串)。
此外
for (i=0; i<5; i++) {
printf("%c\n",*temp);
temp++;
}
你正在增加你的指针(访问外部内存部分)
你必须这样写
for (i = 0; i < 5; i++) {
printf("%c", temp[i]);
}
printf("\n");
或更好
printf("%s\n", temp);
我是一名新的 C 程序员。我尝试从静态数组中删除一个元素并将其余元素复制到动态数组中。该程序运行良好,但在 free()
之后出现分段错误。我认为指针 temp
指向堆栈上的一些内存,这就是我出现分段错误的原因(因为我试图释放一些东西,这不是由 malloc 创建的)。但是问题 memcpy 应该从堆栈复制到堆,以便 temp
保持指向堆。这是代码:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int main(int argc, char **argv) {
char name [6]={'a','m', 'i', 'n','f','e'};
char *temp= (char *) malloc(sizeof(char)*5);
memcpy(temp,name1,4);
memcpy(temp+4,name1+5,1);
int i;
for (i=0; i<5; i++) {
printf("%c\n",*temp);
temp++;
}
free(temp);
}
程序的输出是:胺
使用
free(temp-i)
你在循环中增加温度。因此,您没有释放您创建的指针。
更好的方法是
for(i=0;i<5;i++){
printf("%c\n",*(temp+i));
}
free(temp);
char name [6]={'a','m', 'i', 'n','f','e'};
注意这不是 C 的字符串,因为没有终止字符串字符 '\0'(所以它只是一个字符数组而不是字符串)。
此外
for (i=0; i<5; i++) {
printf("%c\n",*temp);
temp++;
}
你正在增加你的指针(访问外部内存部分) 你必须这样写
for (i = 0; i < 5; i++) {
printf("%c", temp[i]);
}
printf("\n");
或更好
printf("%s\n", temp);