我对此代码有疑问:
主():
...
int main()
{
int i=0, choice=0;
int *array_val=NULL;
while((choice=menu_sort())!=9)
{
switch(choice)
{
case 1:
i=ins_val(&array_val, i);
break;
....
我从另一个来源调用ins_val()
函数:
int ins_val(int **array_val, int i)
{
int j=0, add=0, k=0;
system("cls");
printf("Number to add: ");
scanf("%d", &add);
i++;
reall(array_val, i);
*array_val[i-1]=add;
for (j=(i-1); j>0; j--)
{
if (*array_val[j]<(*array_val[j-1]))
{
k=(*array_val[j-1]);
*array_val[j-1]=(*array_val[j]);
*array_val[j]=k;
}
}
return i;
}
和
void reall(int **array_val, int i)
{
int *arr=NULL;
arr=malloc(sizeof(int)*i);
int j=0;
for (j=0; j<i-1; j++)
{
arr[j]=(*array_val[j]);
}
int size=(sizeof(int)*i);
free(*array_val);
(*array_val)=(int*)malloc(size);
if ((*array_val)!=NULL)
{
for (j=0; j<i-1; j++)
{
(*array_val[j])=arr[j];
}
free(arr);
}
else
{
...
}
return;
}
我想创建一个动态数组,我可以在其中保存值并对其进行排序。
我的问题是内存分配,因为我只能在array_val
数组中保存一个值,即使malloc()
我分配sizeof(int)*i
,所以当我尝试保存时第二个值我得到一个错误。
答案 0 :(得分:0)
您需要更改您的分配:
// just some valid rectangle arguments
int x = 0;
int y = 0;
int width = 10;
int height = 20;
// our rectangle...
cv::Rect rect(x, y, width, height);
// and its top left corner...
cv::Point pt1(x, y);
// and its bottom right corner.
cv::Point pt2(x + width, y + height);
// These two calls...
cv::rectangle(img, pt1, pt2, cv::Scalar(0, 255, 0));
// essentially do the same thing
cv::rectangle(img, rect, cv::Scalar(0, 255, 0))
为:
self.webView.stringByEvaluatingJavaScript(from: "document.body.style.zoom = 1.5;")
此外,您有两个缺少索引的循环:
(*array_val[j])=arr[j];
这应该是:
(*array_val)[j] = arr[j];
但是,当您将for (j=0; j<i-1; j++)
传递给for (j = 0; j < i; j++)
时,段错误是因为*array_val = NULL
。 ins_val()
中的此代码需要更改为:
reall()
这样的事情:
for (j=0; j<i-1; j++)
{
arr[j]=(*array_val[j]);
}
int size=(sizeof(int)*i);
free(*array_val);
在此循环中,您尝试取消引用空指针,因为if (*array_val) {
for (j=0; j<i; j++)
arr[j]=(*array_val)[j];
free(*array_val);
}
int size=(sizeof(int)*i);
最初为NULL。