我的理解是,数组的浅表副本会复制数组变量,因此您有两个指向堆上相同内存位置的指针.但根据该逻辑,下面的代码应该可以工作,但它不会:
Sub Main()
Dim row As Long() = {1, 2, 3, 4}
ChangeRow(row.Clone)
Console.WriteLine(row(0))
End Sub
Sub ChangeRow(ByVal array As Long())
array(0) = 0
End Sub
Run Code Online (Sandbox Code Playgroud)
克隆方法据说是一个浅拷贝.这意味着您将指向原始数组的指针作为参数传递.到目前为止,我所读到的关于这个主题的所有内容都指向这段代码有效,但事实并非如此.谁能解释一下?
有问题的方言是VB.Net
我一直在研究学校的一些练习题,其中之一是必须将输入的整数写到动态分配的字符串中。该代码可以很好地完成工作,直到释放分配的内存(发生堆损坏)为止。
有人可以解释为什么会发生这种情况以及我在做什么错吗?
int main() {
char *string = NULL;
char **string2 = &string;
Conversion(string2);
printf("Entered number converted to string: %s", string);
free(string);
return 0;
}
int Conversion(char **string) {
int num = 0, temp = 0, dcount = 0;
printf("Enter number: ");
scanf(" %d", &num);
temp = num;
while (temp != 0) {
temp /= 10;
dcount++;
}
*string = (char*)malloc(dcount*sizeof(char));
if (*string == NULL) {
printf("Error during memory allocation!");
return -1;
}
sprintf(*string, "%d", num);
return 0;
}
Run Code Online (Sandbox Code Playgroud) c string pointers segmentation-fault dynamic-memory-allocation