我的程式有問題。
當我啟動程式時,控制臺沒有顯示它應該顯示的 2 個數字,而是只顯示這個:
Process returned -1073741819 (0xC0000005) execution time : 1.759 s
這是我的代碼:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
Test(int* Ptr)
{
Ptr=(int*)malloc(8);
if(Ptr==0)
{
printf("malloc error\n");
}
Ptr[0]=155;
Ptr[1]=800;
}
int main()
{
int* m_Ptr=0;
Test(m_Ptr);
printf("%d %d",m_Ptr[0],m_Ptr[1];
return 0;
}
uj5u.com熱心網友回復:
您的主要問題是您傳遞給 test() 的指標是通過副本傳遞的。因此m_ptr,傳入時為空,而測驗回傳時仍為空。
您可能希望將您的功能稍微更改為更像:
int* Test()
{
int * Ptr = (int*) malloc(20);
if(Ptr==0)
{
printf("malloc error\n");
}
Ptr[0]=155;
Ptr[1]=800;
return Ptr; // Return the pointer by value
}
并使用像(在主要):
int* m_Ptr = Test(m_Ptr);
// Now m_Ptr actually points to something...
uj5u.com熱心網友回復:
引數Ptrintest是記憶體中與m_Ptrin不同的物件main- 對 的任何更改test::Ptr(例如為其分配結果malloc)都不會反映在 中main::m_Ptr。您要么必須將指標或參考傳遞m_Ptr給test,要么test必須回傳您分配給的指標值m_Ptr:
m_Ptr = Test(); // returns pointer to newly allocated memory.
如果這是 C ,則不要使用malloc(or calloc, or realloc)。要么使用標準容器,如 a vectoror set(隨著新專案的添加而自動增長),要么使用new運算子手動為某種智能指標分配記憶體。 不要在 C 代碼中使用 C 風格的記憶體管理;這是勞動密集型的,不安全的,而且很容易出錯。
uj5u.com熱心網友回復:
與malloc(8)您請求8 個位元組。在 64 位系統上sizeof(int)可能是 8 個位元組。如果是這樣,該行Ptr[1]=800;實際上會寫入超出分配的 Arena 的記憶體。
嘗試將 malloc 行更改為
Ptr=(int*)malloc(sizeof(int)*2)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/324911.html
上一篇:*node如何復制*next?
