當我運行這個我在printf上得到segv,我做錯了什麼?分配字符數組和打印第一個條目
int main() {
char **bla;
int size =10;
int i;
bla = calloc(size*size,sizeof(char *));
for(i=0;i<size;i++) {
*bla = calloc(10,sizeof(char));
strncpy(*bla,"aaaaa",size);
bla++;
}
printf("%s\n",bla[0]);
}
我知道我能做到這一點與
int main() {
char **bla;
int size =10;
int i;
bla = calloc(size*size,sizeof(char *));
for(i=0;i<size;i++) {
bla[i] = calloc(10,sizeof(char));
strncpy(bla[i],"aaaaa",size);
}
printf("%s\n",bla[0]);
}
,但有什麼辦法用指針來做到這一點?
我第二次建議使用第二個指針遍歷數組。如果你忘記了'alloc'返回的值,那麼你以後將無法'釋放'內存。爲獲得最佳效果,請複製並不要觸摸原始指針。 – bta 2010-07-12 19:47:33
-1'*(bla + i)'只是'bla [i]',這正是OP要求避免的...... – 2010-07-12 19:58:10
@Chris:我懷疑不是。這可能是指針的作業分配。 – SLaks 2010-07-12 20:06:59