[英]keep crashing after 2-D pointer array printing in C
在以下代码中,我在最后一个for循环之后一直崩溃。 我无法通过使用Netbeans进行调试来弄清楚。for循环有效,并打印我要打印的内容,但是程序崩溃而不是成功终止。 您能帮忙吗(我知道获取,我会尽快尝试fgets)?
码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char *str,**string,buffer[50],temp[2];
int i,j,size,counter;
size=1;
string=(char**) calloc(size,sizeof(char*));
for (i=0; i<size; i++) string[i]=(char*)malloc(50*sizeof(char));
printf("\nGimme strings, terminate input with x");
i=0;
gets(string[i]);
temp[0]=120;//x
temp[1]='\0';
size=2;
while(strcmp(string[i],temp)!=0)
{
string=realloc(string,size*sizeof(char**));
i++;
string[i]=malloc(50*sizeof(char));
gets(string[i]);
size++;
counter++;
}
for(i=0; i<=counter; i++) printf("\n%s",string[i]);
return 0;
}
在while
循环之前, counter
未初始化为0
并使用
string=realloc(string,size*sizeof(char*));
代替
string=realloc(string,size*sizeof(char**));
您能否详细描述您打算做什么,因为在代码中您正在分配指针数组,然后为数组中的每个指针分配内存,然后使用realloc(string,2*sizeof(char**));
这将删除几乎所有数组,并仅保留前两个指针。 因此,您正在失去指向已分配内存的指针,因此无法再释放它们:
计数器应在while循环之前设置为零。 默认情况下不设置为零。
for循环中的循环应排除counter
:
for(i=0; i<counter; i++) printf("\\n%s",string[i]);
通过调用free
释放所有动态分配的内存。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.