【发布时间】:2018-01-24 14:06:13
【问题描述】:
我有一个段错误,但我不知道为什么。 我知道它应该可以工作,但它不断告诉我存在段错误,有人有解决方案吗? 请有人帮助我需要了解我的 BA。
#include <stdio.h>
#include <stdlib.h>
int split_allocate(const char* s, char*** word_array){
char c;
char tmp[100];
int id_s,i=0, j=0,k;
for(id_s =0 ; (c=s[id_s])!='\0' ; id_s++){
printf("%c\n", c);
if(c!=' ' && c!='\t' && c!='\n'){
tmp[i]=c;
i++;
printf("i if : %d\n", i);
continue;
}
tmp[i]='\0';
printf("i else : %d & tmp : %s\n", i, tmp);
(*word_array)[j] = (char*)malloc(sizeof(char)*(i+1));
printf("666\n");
if(NULL== (*word_array)[j]){
return -1;
}
for(k=0 ; tmp[k] != '\0' ; k++){
(*word_array)[j][k]=tmp[k];
}
(*word_array)[j][k+1]='\0';
j++;
printf("j for : %d\n", j);
i=0;
}
return j;
}
int main(void) {
char* s = "Salut, cet examen\n a l'air long...";
char*** word_array;
printf("number of words :%d\n", split_allocate(s,word_array));
return 0;
}
【问题讨论】:
-
word_array是一个指针,但是它指向哪里? -
在不确定时使用具有自动存储持续时间的对象的值的未定义行为。
-
另外,成为three-start programmer不是值得努力的事情。
-
那么你应该将指针的地址传递给
char,即char **word_array; split_allocate(..., &word_array);And在函数中分配内存,比如*word_array = malloc(...) -
(*word_array)[j][k+1]我敢打赌它不会像你 @Sam45505 认为的那样做
标签: c segmentation-fault malloc