0

在下面的代码中,我在最后一个 for 循环之后一直崩溃。我无法通过使用 Netbeans 进行调试来弄清楚。for 循环有效,并打印出我想要打印的内容,但随后程序崩溃而不是成功终止。你能帮忙吗(我知道gets,我会尽快尝试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;
}
4

2 回答 2

1

counter未在 while循环前初始化为 0

并使用

string=realloc(string,size*sizeof(char*));

代替

string=realloc(string,size*sizeof(char**));

你能否详细描述你打算做什么,因为在你的代码中你正在分配指针数组,然后你为数组中的每个指针分配内存,然后你删除了几乎数组, realloc(string,2*sizeof(char**));这将删除几乎数组并只保留前 2 个指针。因此,您将丢失指向已分配内存的指针,因此您无法再释放它们:

于 2013-01-09T14:32:54.397 回答
0
  1. 计数器应在 while 循环之前设置为零。默认情况下它不设置为零。

  2. for 查找中的循环应排除counter

    for(i=0; i<counter; i++) printf("\n%s",string[i]);

  3. 通过调用释放所有动态分配的内存free

于 2013-01-09T14:34:14.940 回答