我遇到了一些代碼,其中聲明的同一行上使用了指針。這是它的基本SSCCE:在聲明的同一語句中使用指針
#include "stdafx.h"
#include <iostream>
struct C
{
uint32_t a;
};
int main() {
C* pC = (C*) malloc(sizeof(*pC)); // <---- ???
pC->a = 42;
std::cout << pC << std::endl;
std::cout << pC->a << std::endl;
free(pC);
}
當我嘗試做(在free()
前插入)與uint32
類似的事情:
uint32_t a = a + pC->a;
std::cout << a << std::endl;
然後要麼沒有打印此語句,或在調試隨機值存儲在a
和VS2015給我一個運行時警告。執行後的錯誤級別是3.我知道這是行不通的。
爲什麼我可以使用指針?這是否合法?編譯器爲什麼不抱怨這樣的陳述?該聲明是否在幕後分裂爲多個聲明?
未在SSCE正在使用的指針的值時,僅使用它的類型 - '的sizeof(* PC) '和sizeof(C)'是一樣的。使用某些* value *和使用它的* type *是非常不同的。 –
'malloc'和'free'?正在編程C或C++? – JHBonarius
C++。正如我所說的,這不是我自己的代碼,我只是將它剝離到了獲得SSCCE的基本部分。我知道我應該使用新的/刪除。另外,downvoter可以解釋爲什麼這不是一個好問題? – Timmos