没有malloc可以释放指针地址吗?

Zer*_*One -7 c linux data-segment

我们假设这段代码:

int i,j=0;
char* block = (char*) (0x9000);
char table[4]= {0x01,0x02,0x03,0x04};
for (i=0; i< 45567; i++) {
    *(block +i)= table[j]; 
    j++; 
    if (j==4)
        j=0;
}
Run Code Online (Sandbox Code Playgroud)

我想问一下:

  1. block在堆栈中还是在堆中分配的内存?
  2. 这段代码可能会出现什么问题?
  3. 我可以free(block)在此代码的末尾使用吗?

Kon*_*lph 11

你实际上并没有在堆栈上和堆上分配任何内存.您只是将变量指向一个地址,然后假装那里的内存属于您.

这在C或C++中都不合法,通常不起作用.而"不工作"在这里真的意味着什么.并且由于代码是非法的,指针是否可以是freed的问题没有实际意义.

(在非常特定的设置中,如果编译器和硬件支持它,则用于写入特定的硬件地址.但这不是这种情况.)