-1
在动态创建数组 时,似乎一切正常,但在尝试向后打印时核心转储。 它设法只打印最后一个字符串,然后分段错误。分配动态二维数组
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
void init_array(void ***pt, int *ptlen) {
*pt=NULL;
*ptlen=0;
}
void trim_array(void ***pt, int *ptlen, int len) {
*pt=(void**)realloc(*pt, len*sizeof(void*));
*ptlen=len;
}
void write_array(void ***pt, int *ptlen, int pos, void *v) {
if (pos >= *ptlen)
trim_array(pt, ptlen, pos+1);
*pt[pos]=v;
}
void *read_array(void ***pt, int *ptlen, int pos) {
return(*pt[pos]);
}
void destroy_array(void ***pt, int *ptlen) {
trim_array(pt, ptlen, 0);
*pt=NULL;
}
int main(int argc, char *argv[]) {
void **t;
int tlen;
void ***pt = &t;
int *ptlen = &tlen;
char s[256],*p; int i;
init_array(pt, ptlen);
i = 0;
do {
printf("give name:\n");
scanf("%255s",s);
write_array(pt, ptlen, i, (void*)strdup(s));
i++;
} while (strcmp(s,"end"));
for (--i; i>=0; i--) {
p = (char*)read_array(pt, ptlen, i);
printf("%s\n",p);
free(p);
}
destroy_array(pt, ptlen);
return(0);
}
哦,那是不幸的。也许我们可以帮忙。请解释你已经完成了哪些调试,这样我们就不会浪费时间在同一个地方。哪条线段被分割,索引值等等。 –
1.在调用write_array之后立即打印动态条目,显示所有内容都“正常工作” 2.试图打印整个数组(最后一个for循环)导致分段错误 - 只打印最后一个条目.. – user3605146
您可以至少提供你正在使用的输入?为什么要让自己的方式让大家猜测? –