小编But*_*ver的帖子

C:未分配正在释放的malloc错误指针

我试图从函数返回一个字符串数组,然后释放它使用的内存.代码如下:

int main(int argc, const char * argv[])
{
    for (int m = 0; m < 10000; m++) {
        char **data = dataTest();

        int i = 0;
        while(data[i]) {
            printf("%p ",data[i]);
            free(data[i]);
            i++;
        }
        printf(" address= %p.\n",data);
        free(data);
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是功能:

char **dataTest()
{
    char *row[] = {"this", "is", "a", "data", "string", NULL};
    char **str = row;
    char **dataReturn = (char **) malloc(sizeof(char *) * 6);

    int i = 0;
    while (*str) {
        dataReturn[i] = malloc(sizeof(char) * strlen(*str)); …
Run Code Online (Sandbox Code Playgroud)

c malloc

3
推荐指数
1
解决办法
1万
查看次数

二维数组地址和指向其第一个元素的对应指针

就一维数组而言,其数组名称也是第一个元素的地址.所以可以将它分配给指针,如下所示:

char data[5];
char* p_data=data;
Run Code Online (Sandbox Code Playgroud)

所以我认为它应该与二维数组相同.数组名称应该是第一个元素地址的地址.所以,我想做这样的事情:

char data[5][5];
char** pp_data=data;
Run Code Online (Sandbox Code Playgroud)

然后我收到警告说指针类型char**与之不兼容char[ ][ ].

为什么会这样?我理解指针和数组概念错了吗?

c arrays pointers

3
推荐指数
1
解决办法
76
查看次数

标签 统计

c ×2

arrays ×1

malloc ×1

pointers ×1