char *inputForMidTask(int &n, char **ptr) {
printf("Enter the amount of rows: \n");
scanf("%d", &n);
for (int i = 0; i < n; i) {
gets_s(*(ptr i), 100); //throws exception here
}
return *ptr;
}
void byString() {
int n;
char **ptr = (char**)malloc(255 * 255 * sizeof(char));
*ptr = inputForMidTask(n, m, ptr);
}
你好!我需要按字串填充矩陣字串,但我不斷收到例外錯誤 - Lab2_Algs.exe 中的 0x78D6FA8D (ucrtbased.dll) 處拋出的例外:0xC0000005:訪問沖突寫入位置 0xCDCDCDCD。PS **ptr 的記憶體使用函式 malloc 動態分配
uj5u.com熱心網友回復:
您的byString函式分配了一個巨大的緩沖區,但您的inputForMidTask函式需要n小緩沖區。目前尚不清楚如何修復它,因為沒有解釋inputForMidTask應該做什么。最有可能的是,它應該更改為分配n小緩沖區,并且byString只應更改為分配足夠的空間來保存指向小緩沖區的指標。
uj5u.com熱心網友回復:
char **ptr意味著它是一個指標陣列。但是你分配了一個255*255字符陣列,而不是指標。
它應該是:
char **ptr = malloc(255 * sizeof(char*));
for (int i = 0; i < 255; i ) {
ptr[i] = malloc(255 * sizeof(char));
}
您也從未n在呼叫之前進行設定inputForMidTask()。
而且回傳也沒有多大意義*ptr。那只是回傳第一行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/330035.html
上一篇:去指標解參考
