69,373
社区成员
发帖
与我相关
我的任务
分享
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;
}
p=n;
n=(char*)malloc(sizeof(char)*(num+1));
if(num>1){
strcpy(n,p);
}
free(p);
应该是free(n)吧
#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;
}
[/quote]
vc编译也没有出错啊,把你报错的信息贴出来看看[/quote]
Windows 已在 HW1.exe 中触发一个断点。
其原因可能是堆被损坏,这说明 HW1.exe 中或它所加载的任何 DLL 中有 Bug。
原因也可能是用户在 HW1.exe 具有焦点时按下了 F12。
输出窗口可能提供了更多诊断信息。
就是在free(p)的时候报的错。我刚刚在linux+gcc上也试了,也没错。但是free c跟VS2010就是会报错
#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;
}
[/quote]
vc编译也没有出错啊,把你报错的信息贴出来看看
#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;
}
int main(int argc, char **argv)
[/quote]
argv里面的字符串是程序启动的时候传进去的吧。这个能free么?[/quote]
我没有free argv啊,我free的是ar和n,两个都是我malloc出来的,而且是在free p的时候出的错,p的地址=n啊
int main(int argc, char **argv)
[/quote]
argv里面的字符串是程序启动的时候传进去的吧。这个能free么?
int main(int argc, char **argv)