C-内存分配并释放该内存

C-内存分配并释放该内存,c,C,我想编写一些简单的DNA序列比较C源代码 这是我的部分代码 int main(){ char* seq1 = (char*)malloc(sizeof(char)*10); char* seq2 = (char*)malloc(sizeof(char)*10); seq1 = "AAAAATTTTT"; seq2 = "AAAATTTTGG"; /* Compare these two sequences */ free(seq1); fr

我想编写一些简单的DNA序列比较C源代码

这是我的部分代码

int main(){
    char* seq1 = (char*)malloc(sizeof(char)*10);
    char* seq2 = (char*)malloc(sizeof(char)*10);
    seq1 = "AAAAATTTTT";
    seq2 = "AAAATTTTGG";
    /* Compare these two sequences */
    free(seq1);
    free(seq2);
}

这个代码给了我一个错误。类似堆错误的东西

我删除了内存分配行和空闲内存部分,然后它给了我一个没有警告和错误的结果


我先分配内存,设置值,然后释放内存,只是不这样做,两者之间有什么区别

出现错误的原因是,在为指针分配空间后,将字符串文本分配给指针。指向已分配空间的指针在此分配中丢失,无法释放,并导致内存泄漏

此外,您将传递指向free的指针,这些指针不再由malloc系列函数返回。这将调用未定义的行为。

aaaaaattttt不是char*;它是const char*。它有自己的空间,你不应该释放它

您所做的内存分配很可能工作正常;然而,一旦你用文本覆盖了它,你就泄漏了内存,然后试图释放文本的内存,这很可能是UB。

seq1是指向C字符串的指针。在为字符串分配了一些内存之后,seq1指向它。当您将字符串文字赋给seq1时,指针将被覆盖并指向某个静态缓冲区

您应该使用strcpy用数据填充分配给malloc的缓冲区:

strcpy(seq1, "AAAAATTTTT");

但是,这将不起作用,因为在mallocing时,您没有适应尾随的0。您应该为该字符串分配strlenaaaattttt+1字节。

您需要为10个字符和一个终止“\0”分配足够的空间 使用strcpy将字符串指定给指针 malloc的返回不需要强制转换

int main(){
    char* seq1 = malloc(sizeof(char)*11); // allows for 10 characters and terminating '\0'
    char* seq2 = malloc(sizeof(char)*11);
    strcpy ( seq1, "AAAAATTTTT"); // assign string to pointer
    strcpy ( seq2, "AAAATTTTGG");
    /* Compare these two sequences */
    free(seq1);
    free(seq2);
}
类似堆错误的东西。。。还不够精确。复制您收到的确切错误消息。可能是