2012-07-14 70 views
0

所以,我做了一个功能,看起来像这样:如何删除一个函数修改后的2D数组?

const char **myFunction(char *string) 
{ 
    char *bufCopy = new char[strlen(string)]; 
    strcpy(bufCopy,string); 
    char *tmp = func1(bufCopy); 

    const char **RetVector = new const char* [6]; 
    RetVector[0] = tmp; 

    return RetVector; 
} 

FUNC1(即的strtok)修改了第一个参数,所以当我删除[]它给了我堆损坏。我能做什么?

+2

'bufCopy'应该分配'strlen(string)+ 1;'。空终止的额外字符。使用std :: vector Mahesh 2012-07-14 13:49:18

+0

也许堆损坏是来自缓冲区溢出......你分配的字符串是一个字符短,因为strlen()不考虑终止'\ 0'。 – 2012-07-14 13:50:06

+0

谢谢,bufCopy声明如下:char bufCopy [x] = {0}; – user1365914 2012-07-14 13:50:15

回答

1

必须始终跟踪您的bufCopy的原始分配,只有那个可以是delete d。 tmp可能只是指向它的一部分(缓冲区内的某处),所以你不能delete它。

+0

我调试了应用程序和我分配的值,返回并尝试删除在函数的开始和结束时(返回时)具有相同的地址 – user1365914 2012-07-14 13:59:33

相关问题