free一直报错。。。求助

时间:2022-08-31 11:09:50
第1,2次循环都不报错,第三次跑到free(p)就:

Windows 已在 test.exe 中触发一个断点。
其原因可能是堆被损坏,这说明 简易评分系统(服务器端).exe 中或它所加载的任何 DLL 中有 Bug。


 if(flag){
     char *n=(char*)malloc(sizeof(char));
     *n='\0';
     int num=0;
char *p;
     for(l=0;l<strlen(argv[i]);l++){
if((argv[i][l]>='a'&&argv[i][l]<='z')||(argv[i][l]>='A'&&argv[i][l]<='Z')){
num++;
p=n;
n=(char*)malloc(sizeof(char)*(num+1));
if(num>1){
strcpy(n,p);
}
free(p);
n[num-1]=argv[i][l];
}
}
free(ar[i-1]);
ar[i-1]=n;
     }

18 个解决方案

#1


各位大哥给看看这是啥情况。。

#2


ar[i-1] 是个神马东东?
还有free的时候如果和malloc的地址不同会出错的

#3


写的乱七八糟的。看不懂在干啥,你的i怎么定义的?在哪里变化的

#4


引用 2 楼 xiaoji0507 的回复:
ar[i-1] 是个神马东东?
还有free的时候如果和malloc的地址不同会出错的


argv里是10个字符串,我free的和malloc的是同一个地址吧?

int main(int argc, char **argv) 

#5


引用 3 楼 starytx 的回复:
写的乱七八糟的。看不懂在干啥,你的i怎么定义的?在哪里变化的


i啥的不用管,这段是从一个循环里截出来的。你看成1就行了。argv是个字符串数组指针,这里的argv[i]="weired",然后我定义了一个字符指针*n,把argv[i]中不是字母的字符全都过滤掉。我一个字符一个字符的做判定,如果是的话就重新为n申请一个地址,空间=原来n的空间+1,然后用p来free n原来的地址。最后完成以后ar[i-1]原来的空间free掉,再把n 给ar[i-1]。

#6


引用 4 楼 u010554015 的回复:
Quote: 引用 2 楼 xiaoji0507 的回复:

ar[i-1] 是个神马东东?
还有free的时候如果和malloc的地址不同会出错的


argv里是10个字符串,我free的和malloc的是同一个地址吧?

int main(int argc, char **argv) 


argv里面的字符串是程序启动的时候传进去的吧。这个能free么?

#7


引用 6 楼 xiaoji0507 的回复:
Quote: 引用 4 楼 u010554015 的回复:

Quote: 引用 2 楼 xiaoji0507 的回复:

ar[i-1] 是个神马东东?
还有free的时候如果和malloc的地址不同会出错的


argv里是10个字符串,我free的和malloc的是同一个地址吧?

int main(int argc, char **argv) 


argv里面的字符串是程序启动的时候传进去的吧。这个能free么?

我没有free argv啊,我free的是ar和n,两个都是我malloc出来的,而且是在free p的时候出的错,p的地址=n啊

#8


1、在你贴出的程序中出了free那个地方外没有找到ar[]
2、free出错无非就两种原因。
   1)字符串不是malloc出来的
   2) free的字符串和malloc出来的地址不同



自己好好查吧

#9


ar[i-1]是啥玩意???
前面的定义呢???
什么都不给出,怎么看得出来啊 free一直报错。。。求助

#10


引用 9 楼 xuchao1229 的回复:
ar[i-1]是啥玩意???
前面的定义呢???
什么都不给出,怎么看得出来啊 free一直报错。。。求助


#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define NB_OF_ARGS 10

int main(int argc, char **argv) {
int i,j,l;
    if (argc != NB_OF_ARGS + 1) {
        printf("Run the program with 10 command line arguments please.\n");
        return EXIT_FAILURE;
    }
    /* REPLACE WITH COMMENT WITH YOUR CODE */
    
    char *ar[NB_OF_ARGS];
    
    for(i=1;i<=NB_OF_ARGS;i++){
     ar[i-1]=(char*)malloc(sizeof(char)*32);
     strcpy(ar[i - 1], argv[i]);
     int flag=1;
     for(j=0;j<strlen(argv[i]);j++){
            if(ar[i-1][j]>='0'&& ar[i-1][j]<='9'){
                int k=ar[i-1][j]=='0'?10:ar[i-1][j]-'0';
                char *n=(char*)malloc(sizeof(char));
                *n='\0';
                int num=0;
                char *p;
                for(l=0;l<strlen(argv[k]);l++){
                    if((argv[k][l]>='a'&&argv[k][l]<='z')||(argv[k][l]>='A'&&argv[k][l]<='Z')){
                        num++;
                        p=n;
                        n=(char*)malloc(sizeof(char)*(num+1));
                        if(num>1){
                            strcpy(n,p);
                        }
                        free(p);
                        n[num-1]=argv[k][l];
                    }
                }
                n[num]='\0';
                free(ar[i-1]);
                ar[i-1]=n;

                flag=0;
                break;
            }
        }
    if(flag){
     char *n=(char*)malloc(sizeof(char));
     *n='\0';
     int num=0;
char *p;
     for(l=0;l<strlen(argv[i]);l++){
if((argv[i][l]>='a'&&argv[i][l]<='z')||(argv[i][l]>='A'&&argv[i][l]<='Z')){
num++;
p=n;
n=(char*)malloc(sizeof(char)*(num+1));
if(num>1){
strcpy(n,p);
}
free(p);
n[num-1]=argv[i][l];
}
}
            n[num]='\0';
free(ar[i-1]);
ar[i-1]=n;
     }
    }
    
    for(i=1;i<=NB_OF_ARGS;++i){
     argv[i]=ar[i-1];
    }
 
    for (i = 1; i <= NB_OF_ARGS; ++i){
        printf("  %s", argv[i]);
    }
    putchar('\n');
    
    return EXIT_SUCCESS;
}

#11


linux + gcc 没有问题。打印的是输入的十个字符串

#12


引用 11 楼 xiaoji0507 的回复:
linux + gcc 没有问题。打印的是输入的十个字符串

free 不报错?我用free c和VS2010全都报这个错

#13


引用 10 楼 u010554015 的回复:
Quote: 引用 9 楼 xuchao1229 的回复:

ar[i-1]是啥玩意???
前面的定义呢???
什么都不给出,怎么看得出来啊 free一直报错。。。求助


#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define NB_OF_ARGS 10

int main(int argc, char **argv) {
int i,j,l;
    if (argc != NB_OF_ARGS + 1) {
        printf("Run the program with 10 command line arguments please.\n");
        return EXIT_FAILURE;
    }
    /* REPLACE WITH COMMENT WITH YOUR CODE */
    
    char *ar[NB_OF_ARGS];
    
    for(i=1;i<=NB_OF_ARGS;i++){
     ar[i-1]=(char*)malloc(sizeof(char)*32);
     strcpy(ar[i - 1], argv[i]);
     int flag=1;
     for(j=0;j<strlen(argv[i]);j++){
            if(ar[i-1][j]>='0'&& ar[i-1][j]<='9'){
                int k=ar[i-1][j]=='0'?10:ar[i-1][j]-'0';
                char *n=(char*)malloc(sizeof(char));
                *n='\0';
                int num=0;
                char *p;
                for(l=0;l<strlen(argv[k]);l++){
                    if((argv[k][l]>='a'&&argv[k][l]<='z')||(argv[k][l]>='A'&&argv[k][l]<='Z')){
                        num++;
                        p=n;
                        n=(char*)malloc(sizeof(char)*(num+1));
                        if(num>1){
                            strcpy(n,p);
                        }
                        free(p);
                        n[num-1]=argv[k][l];
                    }
                }
                n[num]='\0';
                free(ar[i-1]);
                ar[i-1]=n;

                flag=0;
                break;
            }
        }
    if(flag){
     char *n=(char*)malloc(sizeof(char));
     *n='\0';
     int num=0;
char *p;
     for(l=0;l<strlen(argv[i]);l++){
if((argv[i][l]>='a'&&argv[i][l]<='z')||(argv[i][l]>='A'&&argv[i][l]<='Z')){
num++;
p=n;
n=(char*)malloc(sizeof(char)*(num+1));
if(num>1){
strcpy(n,p);
}
free(p);
n[num-1]=argv[i][l];
}
}
            n[num]='\0';
free(ar[i-1]);
ar[i-1]=n;
     }
    }
    
    for(i=1;i<=NB_OF_ARGS;++i){
     argv[i]=ar[i-1];
    }
 
    for (i = 1; i <= NB_OF_ARGS; ++i){
        printf("  %s", argv[i]);
    }
    putchar('\n');
    
    return EXIT_SUCCESS;
}

vc编译也没有出错啊,把你报错的信息贴出来看看

#14


引用 13 楼 xuchao1229 的回复:
Quote: 引用 10 楼 u010554015 的回复:

Quote: 引用 9 楼 xuchao1229 的回复:

ar[i-1]是啥玩意???
前面的定义呢???
什么都不给出,怎么看得出来啊 free一直报错。。。求助


#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define NB_OF_ARGS 10

int main(int argc, char **argv) {
int i,j,l;
    if (argc != NB_OF_ARGS + 1) {
        printf("Run the program with 10 command line arguments please.\n");
        return EXIT_FAILURE;
    }
    /* REPLACE WITH COMMENT WITH YOUR CODE */
    
    char *ar[NB_OF_ARGS];
    
    for(i=1;i<=NB_OF_ARGS;i++){
     ar[i-1]=(char*)malloc(sizeof(char)*32);
     strcpy(ar[i - 1], argv[i]);
     int flag=1;
     for(j=0;j<strlen(argv[i]);j++){
            if(ar[i-1][j]>='0'&& ar[i-1][j]<='9'){
                int k=ar[i-1][j]=='0'?10:ar[i-1][j]-'0';
                char *n=(char*)malloc(sizeof(char));
                *n='\0';
                int num=0;
                char *p;
                for(l=0;l<strlen(argv[k]);l++){
                    if((argv[k][l]>='a'&&argv[k][l]<='z')||(argv[k][l]>='A'&&argv[k][l]<='Z')){
                        num++;
                        p=n;
                        n=(char*)malloc(sizeof(char)*(num+1));
                        if(num>1){
                            strcpy(n,p);
                        }
                        free(p);
                        n[num-1]=argv[k][l];
                    }
                }
                n[num]='\0';
                free(ar[i-1]);
                ar[i-1]=n;

                flag=0;
                break;
            }
        }
    if(flag){
     char *n=(char*)malloc(sizeof(char));
     *n='\0';
     int num=0;
char *p;
     for(l=0;l<strlen(argv[i]);l++){
if((argv[i][l]>='a'&&argv[i][l]<='z')||(argv[i][l]>='A'&&argv[i][l]<='Z')){
num++;
p=n;
n=(char*)malloc(sizeof(char)*(num+1));
if(num>1){
strcpy(n,p);
}
free(p);
n[num-1]=argv[i][l];
}
}
            n[num]='\0';
free(ar[i-1]);
ar[i-1]=n;
     }
    }
    
    for(i=1;i<=NB_OF_ARGS;++i){
     argv[i]=ar[i-1];
    }
 
    for (i = 1; i <= NB_OF_ARGS; ++i){
        printf("  %s", argv[i]);
    }
    putchar('\n');
    
    return EXIT_SUCCESS;
}

vc编译也没有出错啊,把你报错的信息贴出来看看


Windows 已在 HW1.exe 中触发一个断点。

其原因可能是堆被损坏,这说明 HW1.exe 中或它所加载的任何 DLL 中有 Bug。

原因也可能是用户在 HW1.exe 具有焦点时按下了 F12。

输出窗口可能提供了更多诊断信息。

就是在free(p)的时候报的错。我刚刚在linux+gcc上也试了,也没错。但是free c跟VS2010就是会报错

#15


free(p)干什么???
你这里只是用p指向了n
p=n;
                        n=(char*)malloc(sizeof(char)*(num+1));
                        if(num>1){
                            strcpy(n,p);
                        }
                        free(p);

应该是free(n)吧

#16


引用 15 楼 xuchao1229 的回复:
free(p)干什么???
你这里只是用p指向了n
p=n;
                        n=(char*)malloc(sizeof(char)*(num+1));
                        if(num>1){
                            strcpy(n,p);
                        }
                        free(p);

应该是free(n)吧

我是用p来指向n,然后给n申请新的地址,如果p不指向n的话,n原来的地址就丢了,然后我用p把n原来的地址free了,我是那么想的

#17


strncpy或者记得n[num]='\0',不然会出事故,譬如你第三次申请空间位置恰好在上次之前,strcpy越界破坏上次空间数据,free不掉了...

#18


引用 17 楼 angel_su 的回复:
strncpy或者记得n[num]='\0',不然会出事故,譬如你第三次申请空间位置恰好在上次之前,strcpy越界破坏上次空间数据,free不掉了...

lz貌似没有用strncpy这个函数吧,strcpy是自动在末尾添加结束符吧 free一直报错。。。求助

#1


各位大哥给看看这是啥情况。。

#2


ar[i-1] 是个神马东东?
还有free的时候如果和malloc的地址不同会出错的

#3


写的乱七八糟的。看不懂在干啥,你的i怎么定义的?在哪里变化的

#4


引用 2 楼 xiaoji0507 的回复:
ar[i-1] 是个神马东东?
还有free的时候如果和malloc的地址不同会出错的


argv里是10个字符串,我free的和malloc的是同一个地址吧?

int main(int argc, char **argv) 

#5


引用 3 楼 starytx 的回复:
写的乱七八糟的。看不懂在干啥,你的i怎么定义的?在哪里变化的


i啥的不用管,这段是从一个循环里截出来的。你看成1就行了。argv是个字符串数组指针,这里的argv[i]="weired",然后我定义了一个字符指针*n,把argv[i]中不是字母的字符全都过滤掉。我一个字符一个字符的做判定,如果是的话就重新为n申请一个地址,空间=原来n的空间+1,然后用p来free n原来的地址。最后完成以后ar[i-1]原来的空间free掉,再把n 给ar[i-1]。

#6


引用 4 楼 u010554015 的回复:
Quote: 引用 2 楼 xiaoji0507 的回复:

ar[i-1] 是个神马东东?
还有free的时候如果和malloc的地址不同会出错的


argv里是10个字符串,我free的和malloc的是同一个地址吧?

int main(int argc, char **argv) 


argv里面的字符串是程序启动的时候传进去的吧。这个能free么?

#7


引用 6 楼 xiaoji0507 的回复:
Quote: 引用 4 楼 u010554015 的回复:

Quote: 引用 2 楼 xiaoji0507 的回复:

ar[i-1] 是个神马东东?
还有free的时候如果和malloc的地址不同会出错的


argv里是10个字符串,我free的和malloc的是同一个地址吧?

int main(int argc, char **argv) 


argv里面的字符串是程序启动的时候传进去的吧。这个能free么?

我没有free argv啊,我free的是ar和n,两个都是我malloc出来的,而且是在free p的时候出的错,p的地址=n啊

#8


1、在你贴出的程序中出了free那个地方外没有找到ar[]
2、free出错无非就两种原因。
   1)字符串不是malloc出来的
   2) free的字符串和malloc出来的地址不同



自己好好查吧

#9


ar[i-1]是啥玩意???
前面的定义呢???
什么都不给出,怎么看得出来啊 free一直报错。。。求助

#10


引用 9 楼 xuchao1229 的回复:
ar[i-1]是啥玩意???
前面的定义呢???
什么都不给出,怎么看得出来啊 free一直报错。。。求助


#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define NB_OF_ARGS 10

int main(int argc, char **argv) {
int i,j,l;
    if (argc != NB_OF_ARGS + 1) {
        printf("Run the program with 10 command line arguments please.\n");
        return EXIT_FAILURE;
    }
    /* REPLACE WITH COMMENT WITH YOUR CODE */
    
    char *ar[NB_OF_ARGS];
    
    for(i=1;i<=NB_OF_ARGS;i++){
     ar[i-1]=(char*)malloc(sizeof(char)*32);
     strcpy(ar[i - 1], argv[i]);
     int flag=1;
     for(j=0;j<strlen(argv[i]);j++){
            if(ar[i-1][j]>='0'&& ar[i-1][j]<='9'){
                int k=ar[i-1][j]=='0'?10:ar[i-1][j]-'0';
                char *n=(char*)malloc(sizeof(char));
                *n='\0';
                int num=0;
                char *p;
                for(l=0;l<strlen(argv[k]);l++){
                    if((argv[k][l]>='a'&&argv[k][l]<='z')||(argv[k][l]>='A'&&argv[k][l]<='Z')){
                        num++;
                        p=n;
                        n=(char*)malloc(sizeof(char)*(num+1));
                        if(num>1){
                            strcpy(n,p);
                        }
                        free(p);
                        n[num-1]=argv[k][l];
                    }
                }
                n[num]='\0';
                free(ar[i-1]);
                ar[i-1]=n;

                flag=0;
                break;
            }
        }
    if(flag){
     char *n=(char*)malloc(sizeof(char));
     *n='\0';
     int num=0;
char *p;
     for(l=0;l<strlen(argv[i]);l++){
if((argv[i][l]>='a'&&argv[i][l]<='z')||(argv[i][l]>='A'&&argv[i][l]<='Z')){
num++;
p=n;
n=(char*)malloc(sizeof(char)*(num+1));
if(num>1){
strcpy(n,p);
}
free(p);
n[num-1]=argv[i][l];
}
}
            n[num]='\0';
free(ar[i-1]);
ar[i-1]=n;
     }
    }
    
    for(i=1;i<=NB_OF_ARGS;++i){
     argv[i]=ar[i-1];
    }
 
    for (i = 1; i <= NB_OF_ARGS; ++i){
        printf("  %s", argv[i]);
    }
    putchar('\n');
    
    return EXIT_SUCCESS;
}

#11


linux + gcc 没有问题。打印的是输入的十个字符串

#12


引用 11 楼 xiaoji0507 的回复:
linux + gcc 没有问题。打印的是输入的十个字符串

free 不报错?我用free c和VS2010全都报这个错

#13


引用 10 楼 u010554015 的回复:
Quote: 引用 9 楼 xuchao1229 的回复:

ar[i-1]是啥玩意???
前面的定义呢???
什么都不给出,怎么看得出来啊 free一直报错。。。求助


#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define NB_OF_ARGS 10

int main(int argc, char **argv) {
int i,j,l;
    if (argc != NB_OF_ARGS + 1) {
        printf("Run the program with 10 command line arguments please.\n");
        return EXIT_FAILURE;
    }
    /* REPLACE WITH COMMENT WITH YOUR CODE */
    
    char *ar[NB_OF_ARGS];
    
    for(i=1;i<=NB_OF_ARGS;i++){
     ar[i-1]=(char*)malloc(sizeof(char)*32);
     strcpy(ar[i - 1], argv[i]);
     int flag=1;
     for(j=0;j<strlen(argv[i]);j++){
            if(ar[i-1][j]>='0'&& ar[i-1][j]<='9'){
                int k=ar[i-1][j]=='0'?10:ar[i-1][j]-'0';
                char *n=(char*)malloc(sizeof(char));
                *n='\0';
                int num=0;
                char *p;
                for(l=0;l<strlen(argv[k]);l++){
                    if((argv[k][l]>='a'&&argv[k][l]<='z')||(argv[k][l]>='A'&&argv[k][l]<='Z')){
                        num++;
                        p=n;
                        n=(char*)malloc(sizeof(char)*(num+1));
                        if(num>1){
                            strcpy(n,p);
                        }
                        free(p);
                        n[num-1]=argv[k][l];
                    }
                }
                n[num]='\0';
                free(ar[i-1]);
                ar[i-1]=n;

                flag=0;
                break;
            }
        }
    if(flag){
     char *n=(char*)malloc(sizeof(char));
     *n='\0';
     int num=0;
char *p;
     for(l=0;l<strlen(argv[i]);l++){
if((argv[i][l]>='a'&&argv[i][l]<='z')||(argv[i][l]>='A'&&argv[i][l]<='Z')){
num++;
p=n;
n=(char*)malloc(sizeof(char)*(num+1));
if(num>1){
strcpy(n,p);
}
free(p);
n[num-1]=argv[i][l];
}
}
            n[num]='\0';
free(ar[i-1]);
ar[i-1]=n;
     }
    }
    
    for(i=1;i<=NB_OF_ARGS;++i){
     argv[i]=ar[i-1];
    }
 
    for (i = 1; i <= NB_OF_ARGS; ++i){
        printf("  %s", argv[i]);
    }
    putchar('\n');
    
    return EXIT_SUCCESS;
}

vc编译也没有出错啊,把你报错的信息贴出来看看

#14


引用 13 楼 xuchao1229 的回复:
Quote: 引用 10 楼 u010554015 的回复:

Quote: 引用 9 楼 xuchao1229 的回复:

ar[i-1]是啥玩意???
前面的定义呢???
什么都不给出,怎么看得出来啊 free一直报错。。。求助


#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define NB_OF_ARGS 10

int main(int argc, char **argv) {
int i,j,l;
    if (argc != NB_OF_ARGS + 1) {
        printf("Run the program with 10 command line arguments please.\n");
        return EXIT_FAILURE;
    }
    /* REPLACE WITH COMMENT WITH YOUR CODE */
    
    char *ar[NB_OF_ARGS];
    
    for(i=1;i<=NB_OF_ARGS;i++){
     ar[i-1]=(char*)malloc(sizeof(char)*32);
     strcpy(ar[i - 1], argv[i]);
     int flag=1;
     for(j=0;j<strlen(argv[i]);j++){
            if(ar[i-1][j]>='0'&& ar[i-1][j]<='9'){
                int k=ar[i-1][j]=='0'?10:ar[i-1][j]-'0';
                char *n=(char*)malloc(sizeof(char));
                *n='\0';
                int num=0;
                char *p;
                for(l=0;l<strlen(argv[k]);l++){
                    if((argv[k][l]>='a'&&argv[k][l]<='z')||(argv[k][l]>='A'&&argv[k][l]<='Z')){
                        num++;
                        p=n;
                        n=(char*)malloc(sizeof(char)*(num+1));
                        if(num>1){
                            strcpy(n,p);
                        }
                        free(p);
                        n[num-1]=argv[k][l];
                    }
                }
                n[num]='\0';
                free(ar[i-1]);
                ar[i-1]=n;

                flag=0;
                break;
            }
        }
    if(flag){
     char *n=(char*)malloc(sizeof(char));
     *n='\0';
     int num=0;
char *p;
     for(l=0;l<strlen(argv[i]);l++){
if((argv[i][l]>='a'&&argv[i][l]<='z')||(argv[i][l]>='A'&&argv[i][l]<='Z')){
num++;
p=n;
n=(char*)malloc(sizeof(char)*(num+1));
if(num>1){
strcpy(n,p);
}
free(p);
n[num-1]=argv[i][l];
}
}
            n[num]='\0';
free(ar[i-1]);
ar[i-1]=n;
     }
    }
    
    for(i=1;i<=NB_OF_ARGS;++i){
     argv[i]=ar[i-1];
    }
 
    for (i = 1; i <= NB_OF_ARGS; ++i){
        printf("  %s", argv[i]);
    }
    putchar('\n');
    
    return EXIT_SUCCESS;
}

vc编译也没有出错啊,把你报错的信息贴出来看看


Windows 已在 HW1.exe 中触发一个断点。

其原因可能是堆被损坏,这说明 HW1.exe 中或它所加载的任何 DLL 中有 Bug。

原因也可能是用户在 HW1.exe 具有焦点时按下了 F12。

输出窗口可能提供了更多诊断信息。

就是在free(p)的时候报的错。我刚刚在linux+gcc上也试了,也没错。但是free c跟VS2010就是会报错

#15


free(p)干什么???
你这里只是用p指向了n
p=n;
                        n=(char*)malloc(sizeof(char)*(num+1));
                        if(num>1){
                            strcpy(n,p);
                        }
                        free(p);

应该是free(n)吧

#16


引用 15 楼 xuchao1229 的回复:
free(p)干什么???
你这里只是用p指向了n
p=n;
                        n=(char*)malloc(sizeof(char)*(num+1));
                        if(num>1){
                            strcpy(n,p);
                        }
                        free(p);

应该是free(n)吧

我是用p来指向n,然后给n申请新的地址,如果p不指向n的话,n原来的地址就丢了,然后我用p把n原来的地址free了,我是那么想的

#17


strncpy或者记得n[num]='\0',不然会出事故,譬如你第三次申请空间位置恰好在上次之前,strcpy越界破坏上次空间数据,free不掉了...

#18


引用 17 楼 angel_su 的回复:
strncpy或者记得n[num]='\0',不然会出事故,譬如你第三次申请空间位置恰好在上次之前,strcpy越界破坏上次空间数据,free不掉了...

lz貌似没有用strncpy这个函数吧,strcpy是自动在末尾添加结束符吧 free一直报错。。。求助