C-内存分配并释放该内存
我想编写一些简单的DNA序列比较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
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);
}
类似堆错误的东西。。。还不够精确。复制您收到的确切错误消息。可能是