memcpy和free之后的分段错误

时间:2015-05-06 03:22:41

标签: c segmentation-fault free memcpy

我是一名新的C程序员。我尝试从静态数组中删除一个元素,并将其余元素复制到动态数组上。该程序工作正常,但temp后我得到了分段错误。我认为指针temp指向堆栈上的一些内存,这就是为什么我会出现分段错误(因为我试图释放一些不是由malloc创建的东西)。但问题memcpy应该从堆栈复制到堆,以便#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); } 保持指向堆。这是代码:

current_quarter = ((Time.now.month - 1) / 3) + 1

该计划的产出是:胺

2 个答案:

答案 0 :(得分:4)

使用

free(temp-i)

你在循环中增加temp。因此,您不会释放您创建的指针。

更好的方法是

for(i=0;i<5;i++){
    printf("%c\n",*(temp+i));
}
free(temp);

答案 1 :(得分:0)

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);