C-纪念和免费后的分割故障



i新的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("%cn",*temp);
        temp++;
    }
    free(temp);
}

该程序的输出为:amine

使用

free(temp-i)

您会在循环中增加温度。因此,您没有释放您创建的指针。

更好的方法是

for(i=0;i<5;i++){
    printf("%cn",*(temp+i));
}
free(temp);
char name [6]={'a','m', 'i', 'n','f','e'};

请注意这不是C的字符串,因为没有终结者字符串字符' 0'(所以它只是字符数组,而不是字符串)。

此外

for (i=0; i<5; i++) {
        printf("%cn",*temp);
        temp++;
    }

您正在增加指针(访问外部内存零件)你必须写这个

for (i = 0; i < 5; i++) {
    printf("%c", temp[i]);
    }
printf("n");

或更好的

printf("%sn", temp);

相关内容

  • 没有找到相关文章

最新更新