标签: memory-movement

使用 free() 和 realloc() 的错误

我写了一小段代码。我正在使用 void * 指针来为 C 的基本数据类型创建一个交换函数。我写了这个函数的两个版本,因为字符串与其他基本数据类型有点不同(但也许我错了)。这个函数的版本对于 int、float 和 char 它有效,但是当我尝试将一个用于字符串时,Valgrind 向我报告了多个错误。这是主要的:

int main(){

 int dimA=0,dimB=0;
 char *v,*g,*str1="heygv",*str2="bag";

 v=malloc(strlen(str1)+1);
 strcpy(v,str1);
 g=malloc(strlen(str2)+1);
 strcpy(g,str2);

 dimA=strlen(v);
 dimB=strlen(g);

 printf("\nX : %s %p ,Y : %s %p \n",v,v,g,g);
 swapStr(v,g,dimA+1,dimB+1);
 printf("\nX : %s %p ,Y : %s %p \n",v,v,g,g);

 free(v);
 free(g);

return 191;

}
Run Code Online (Sandbox Code Playgroud)

这是交换函数,它可以正常工作并正确交换字符串的值:

void* swapStr(void* a,void* b,int dimA,int dimB){

void* temp=malloc(dimA);
void* ptr;

    memcpy(temp,a,dimA);

    if(dimB>dimA){

        ptr=realloc(a,dimB);

        if(ptr==NULL){
            printf("\nError 1 realloc in swapStr\n");
            return;
        }else a=ptr;

    }

    memcpy(a,b,dimB);

    if(dimA>dimB){

        ptr=realloc(b,dimA);

        if(ptr==NULL){
            printf("\nError 2 realloc in swapStr\n"); …
Run Code Online (Sandbox Code Playgroud)

c valgrind memory-leaks memory-movement

2
推荐指数
1
解决办法
364
查看次数

标签 统计

c ×1

memory-leaks ×1

memory-movement ×1

valgrind ×1