这个小测试程序正在从命令行读取字符串,我遇到了一个seg错误。谁能帮我?
我还想问一下realloc()
与malloc()
有何不同?我的意思是我认为realloc()
更聪明,为什么我们甚至需要malloc()
?对于malloc()
我知道我们必须将字符串和malloc()
复制到新的内存中,但是有人能给我一个例子吗?
#include <stdio.h>
#include <stdlib.h>
//reading the string from the command line
int
main(int argc, char *argv[]){
char** inputStrings;
int i;
for(i=1;i<argc;i++){
inputStrings=realloc(*inputStrings,i*sizeof(argv[i]));
inputStrings[i-1]=argv[i];
}
for(i=0;i<argc-1;i++){
printf("what is in the address: %s\n",inputStrings[i]);
}
free(inputStrings);
return 0;
}
答案 0 :(得分:2)
您忘记将内存分配给char** inputStrings;
要解决,
inputStrings
和inputStrings[i]
。 [malloc()
/ calloc()
] ,或者
inputStrings
之前将内存分配到inputStrings[i]
并将NULL
设置为realloc()
。检查realloc()
的{{3}}。
注意:请学习使用调试器,例如gdb
。 确实有助于查明上述错误。
编辑:
inputStrings=realloc(*inputStrings,i*sizeof(argv[i]));
也是错误的概念。您必须单独为inputStrings
和inputStrings[i]
分配内存。请查看man page以获取相关帮助。
答案 1 :(得分:2)
你应该为char** inputString
分配内存。首先使用malloc
或calloc
。
inputstring = malloc(sizeof(char*));
然后你应该在循环中为每个位置分配内存
inputString[i] = malloc(sizeof(char));
之后只有你能够使用realloc
重新分配内存。
答案 2 :(得分:0)
修复示例
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]){
char **inputStrings = NULL;
int i;
for(i=1; i<argc; i++){
inputStrings=realloc(inputStrings, i*sizeof(argv[i]));//check omitted
inputStrings[i-1]=argv[i];
}
for(i=0;i<argc-1;i++){
printf("what is in the address: %s\n", inputStrings[i]);
}
free(inputStrings);
return 0;
}