![](/img/trans.png)
[英]What is causing this runtime error while passing arrays on the heap between functions, c++
[英]passing arrays (&) to functions c++, runtime error
#include <iostream>
#include <cmath>
using namespace std;
void input(int(&x)[10]);
int copy(int (&x)[10], int(&y)[10]);
void read(int(&x)[10], int b);
int main()
{
int m[10], v[10], c;
input((&m)[10]);
read((&m)[10], 10);
c = copy((&m)[10], (&v)[10]);
read((&v)[c],c);
system("PAUSE");
return 0;
}
void input(int(&x)[10])
{
for(int i=0; i < 10; i++)
{
cout<<"enter number "<<i+1<<": ";
cin>>x[i];
}
}
void read(int(&x)[10], int b)
{
for(int i=0; i < b; i++)
{
cout<<"number("<<i+1<<"): "<<x[i];
}
}
int copy(int(&x)[10], int(&y)[10])
{
int c = 0;
for(int i = 0; i < 10; i++)
{
if(x[i] % 3 == 0)
{
y[c]=x[i];
c++;
}
}
return c;
}
輸入第一個數字時會遇到運行時錯誤,我將不勝感激,我認為問題在於將數組傳遞給函數的方式,但我不確定該程序的目標是獲取10 int的輸入數組m中的-s,然后將那些可被3整除的變量傳輸到v,然后將兩者輸出
input((&m)[10]);
這並沒有按照您的想象做。 &m
是指向數組的指針,因此(&m)[10]
是對數組的第十個元素的引用; 換句話說,到距離m
末尾一定距離的無效內存塊。
您要input(m);
傳遞對m
的引用。
傳遞數組的語法不正確 (盡管可以編譯)。 它應該很簡單,
input(m);
read(m, 10);
c = copy(m, v);
read(v, c);
int(&x)[10]
應該用於函數原型,在該函數原型中您將通過引用接收大小為10的數組。 在調用函數時,只需傳遞變量名即可。
將數組傳遞給c ++無效。 除非您使用指針或創建包含數組的類並將其傳遞,否則這將導致運行時錯誤。
無效輸入(int(&x)[10])
在此函數簽名中:
x
是參數名稱 int(&)[10]
是參數類型(對10個int
數組的引用)。 現在考慮一下如何調用此函數,大概是通過復制/粘貼:
input((&m)[10]);
使用任何函數調用,您只需編寫變量的名稱,而不是變量的類型。 因此,當您將數組傳遞給函數時,應該只寫:
input(m);
(由於&
的三重含義,目前您正在傳遞內存中不存在的其他內容。)
在其他傳遞數組引用的地方也一樣。
您正在傳遞指向函數的指針,而不是引用。
input((&m)[10]);
在上面的行中, &
取得m
的地址,並將其變成指針。 該函數不期望指針。 跳過&
中的呼叫,它應該可以工作。
另外,建議您嘗試查找描述指針和引用之間差異的教程。 快速的Google搜索在Stack Overflow上提出了這個問題,並給出了一些好的答案。
擴展上面的答案:m [10]在數組的最后一個元素之后,因此發生的情況是您正在讀取變量外部的內存,這通常被認為是不好的形式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.