2011-11-27 69 views
-3

所以我的prgrm工作正常,直到我试图重新分配一个指针,但它不会一直崩溃。有时它确实有时它运行得很好。任何人都可以告诉我我的代码有什么问题?堆使用realloc时腐败 - VS 2010

#include <stdio.h> 
#include <cstdlib> 
#include <cstring> 

char getword(char[]); //return length 

int main() 
{ 

    static char buffer[100]; 
    int wcount = 5, n = 0; 
    char **p = (char**) malloc (wcount); 
    int len = getword(buffer); 
    while (len && n < wcount) 
    { 
     p[n] = (char *) malloc (len); 
     strncpy(p[n++], buffer, len); 
     len = getword(buffer); 
     if (n == wcount) 
     { 
      wcount += 10; 
      char** temp = (char**) realloc (p, wcount); 
      if (temp == NULL) 
       break; 
      else 
       p = temp; 
     } 
    } 

    return 0; 
} 

char getword(char buffer[]) 
{ 
    int len = 0; 
    char c = getchar(); 

    if (c == EOF) 
     return len; 

    while (c == 32 || c == '\n' || c == '\t' || c == '\v') 
    { 
     c = getchar(); 
    } 
    do 
    { 
     buffer[len++] = c; 
     c = getchar(); 
    } 
    while (c != 32 && c != '\n' && c != '\t' && c != '\v' && c != EOF); 
    buffer[len] = 0; 
    return ++len; 
} 

回答

2

char **p = (char**) malloc (wcount);分配wcount字节,而不是wcount指针。同样地realloc

+0

ooooh我明白了。我懂了。所以这项工作: – 0x56794E

+0

char ** p =(char * *)malloc(wcount * sizeof(char *)); – 0x56794E

+1

非常感谢Raymond!有用!! ^^! – 0x56794E