初始化我使用Visual Studio 2017年社區訪問衝突用memset
按照下面的討論後寫入到一個二維數組寫入錯誤:
Fastest way to zero out a 2d array in C?
我有一個2 d矩陣( 10×10),我初始化使用memset
。這是選項1
選項2初始化使用兩個for
環路相同的矩陣,每一個從0循環到9
然後,當我寫爲一個有效的矩陣位置,訪問衝突寫入錯誤時引發當使用選項1時。當使用選項2時,一切正常。
最低工作的代碼,我認爲這個複製下面給出:
#include <stdio.h>
#include <conio.h>
#include <time.h>
#include <iostream>
#include <sstream>
#include <fstream>
#include <iomanip>
#include <stdlib.h>
#include <math.h>
#include <cmath>
#include <vector>
#include <string>
#include <limits.h>
#include <stdlib.h>
#include <array>
int main(){
double ** cmatrix = new double*[10];
for (int i = 0; i < 10; i++)
cmatrix[i] = new double[10];
memset(cmatrix, 0, 10 * 10 * sizeof(double));//Option 1
//for (int i = 0; i < 10; i++)//Option 2
//for (int j = 0; j < 10; j++)
//cmatrix[i][j] = 0;
cmatrix[0][1] = 5;//This step produces error on Option 1, but not on option 2
return 0;
}
任何幫助表示讚賞。
'memset'要求填充的內存是一個連續的區域,但是你有11個單獨的分配。 –
不要在C++中使用C語言問題的答案。他們是不同的語言;爲此使用'memset'既不必要也不是一個好主意。 –
[正確分配多維數組](https://stackoverflow.com/questions/42094465/correctly-allocating-multi-dimensional-arrays) – Lundin